Dubbele gegevens verwijderen uit database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • kokkie20
  • Registratie: December 2009
  • Laatst online: 19-06 18:09
Hallo,
Ik ben in me laatste week van mijn stage, en ben nu bezig met een opdracht voor import van een webshop.
De producten worden geimporteerd, en aan de hand van een SkuNumber (geen idee wat het is maar goed) worden de tabellen aan elkaar gekoppeld.
Maar nu zit ik met een probleem.

Wij krijgen van een groothandel een csv bestand binnen met allemaal gegevens.
Ook zit er een csv bestand in met afbeeldingen van het product.
Het importeren e.d. gaat allemaal goed, maar er zitten nog een grote aantal dubbele records in (dubbele SkuNumber).
Die willen wij eruit gaan filteren.

Ik heb al wat geprobeerd met LINQ (daar moeten wij hier mee werken) maar krijg het alleen niet voor elkaar.

Hierbij mijn code ervoor:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static ProductPhotoViewImport GetDoubleSkuNumbersImport()
        {
            using (var db = DataContextManager.GetInstance())
            {
                var query = (from t in db.ImportProductImages
                             where t.ProductSkuNumber.Count() > 1
                             orderby t.ProductSkuNumber
                             select t.ProductSkuNumber.First());
                foreach (var ProductSkuNumber in query)
                {
                    db.ImportProductImages.DeleteOnSubmit(ProductSkuNumber);
                }
                    db.SubmitChanges();
            }
        }


Maar krijg 2 errors bij "db.ImportProductImages.DeleteOnSubmit(ProductSkuNumber);"
Dit zijn de errors:

Error 1 The best overloaded method match for 'System.Data.Linq.Table<xxxxxx.Web.WebshopAdmin.DataLayer.ImportProductImage>.DeleteOnSubmit(xxxxxx. Web.WebshopAdmin.DataLayer.ImportProductImage)' has some invalid arguments D:\SVN\WebshopAdmin\BusinessLayer\BusinessObjects\ProductPhotoObject.cs 56 21 BusinessLayer


Error 2 Argument '1': cannot convert from 'string' to 'xxxxxx.Web.WebshopAdmin.DataLayer.ImportProductImage' D:\SVN\WebshopAdmin\BusinessLayer\BusinessObjects\ProductPhotoObject.cs 56 59 BusinessLayer

Mijn stagebegeleider die mag mij niet meer helpen van de directeur (geen idee waarom, wilt hij niet meer) dus zit nu momenteel met me handen in het haar |:(

Ik hoop dat jullie me ermee kunnen helpen.

Bedankt,

Kokkie20

Acties:
  • 0 Henk 'm!

  • kwaakvaak_v2
  • Registratie: Juni 2009
  • Laatst online: 02-06 12:29
ik gok aan de hand van je error dat je ergens nog iets naar een string moet casten

Driving a cadillac in a fool's parade.


Acties:
  • 0 Henk 'm!

Anoniem: 170251

En wat zegt Google? :)

Acties:
  • 0 Henk 'm!

  • TECHcrime
  • Registratie: Februari 2008
  • Laatst online: 14:55
geen idee of je er wat aan hebt, maar excel heeft een functie om dubbele entrys te zoeken ;)

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 02-07 20:20

Creepy

Tactical Espionage Splatterer

En wat heb je zelf al geprobeerd om je foutmeldingen op te lossen? Nog helemaal niks en moeten wij dat voor je doen? Of heb je al zelf al wat geprobeerd? Zo ja, wat heb je dan allemaal al geprobeerd? Zo nee, denk even rustig na wat het zou kunnen zijn en ga wat proberen ;)

Tip: Een "string" is geen "ImportProductImage". Je geeft nu wel een string mee.

Dit soort foutmeldingen moet je zelf kunnen lezen en oplossen met wat basiskennis.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • supergert
  • Registratie: December 2001
  • Niet online
Bekijk de foutmeldingen eens goed.
Blijkbaar wil de DeleteOnSubmit() functie een ImportProductImage als parameter hebben, en niet een string.

ZX81 > C64 > Amiga > BeBox > PowerMac > pc-klonen...


Acties:
  • 0 Henk 'm!

  • s3n
  • Registratie: Juli 2000
  • Laatst online: 16:54

s3n

SKU = Stock Keeping Unit. Gangbaar nummer in de logistiek

Acties:
  • 0 Henk 'm!

  • kokkie20
  • Registratie: December 2009
  • Laatst online: 19-06 18:09
@TECHcrime,
de query werkt wel goed, maar krijg het niet voor elkaar om 1 record van de dubbele record te verwijderen (door die deleteonsubmit.

@creepy
heb al geprobeerd zonder de foreach, deletallonsubmit geprobeerd, de first weggehaald. Maar heeft nog weinig resultaat gebracht.
Ben zelf pas ongeveer 2 maanden bezig met C# dus heb niet veel basiskennis ;)
Ik zeg ook niet dat jullie het moeten oplossen ;)

Maar ik snap niet waar die string dan vandaan moet komen :S

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 02-07 12:07
Volgens mij heb je die .First() verkeerd staan:

var query = (from t in db.ImportProductImages
where t.ProductSkuNumber.Count() > 1
orderby t.ProductSkuNumber
select t.ProductSkuNumber).First();

Acties:
  • 0 Henk 'm!

  • kokkie20
  • Registratie: December 2009
  • Laatst online: 19-06 18:09
heb de first nu verplaatst,
Heb nu dit:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        public static ProductPhotoViewImport GetDoubleSkuNumbersImport()
        {
            using (var db = DataContextManager.GetInstance())
            {
                var query = (from t in db.ImportProductImages
                            where t.ProductSkuNumber.Count() > 1
                            orderby t.ProductSkuNumber
                             select t.ProductSkuNumber).First();
                foreach (ImportProductImage ProductSkuNumber in query)
                {
                    db.ImportProductImages.DeleteOnSubmit(ProductSkuNumber);
                }
                    db.SubmitChanges();
            }
        }


Want zover ik begreep wat ik bij de foreach loop deed was de variabel ProductSkuNumber meegeven,
Maar nu ik dit heb krijg ik deze error:

Error 1 Cannot convert type 'char' to 'xxxxxx.Web.WebshopAdmin.DataLayer.ImportProductImage' D:\SVN\WebshopAdmin\BusinessLayer\BusinessObjects\ProductPhotoObject.cs 55 17 BusinessLayer

kom volgens mij al in de buurt

Acties:
  • 0 Henk 'm!

  • supergert
  • Registratie: December 2001
  • Niet online
Ehm... na 2 maanden C# zou ik toch verwachten dat je die foutmeldingen wat beter kunt lezen.

En ga het geheel eens in de debugger laten lopen (evt. breakpoint bij het betreffende stuk waar 't fout gaat) om te zien wat je precies in die query-variable hebt zitten. Het lijkt er nu op dat me maar wat probeert

Overigens ERG slechte zaak dat je geen stagebegeleider mag raadplegen tijdens je stage!!

ZX81 > C64 > Amiga > BeBox > PowerMac > pc-klonen...


Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 02-07 12:07
Laat de tabel t eens zien (kolomnamen en datatypes)? Heeft deze relaties?
Overigens zal met die .First() alleen de 1e record van de gehele resultset verwijderd worden. Ik denk dat je nog moet groeperen, en dan een iteratie toepassen.

Acties:
  • 0 Henk 'm!

  • kokkie20
  • Registratie: December 2009
  • Laatst online: 19-06 18:09
wil hem wel in de debugger laten lopen, maar gaat niet lukken als ik nog errors open heb staan.
Vind ik ook, volgens de directeur is hij "veels te druk". (niet dus....)

@mastermind

Heb nog geen relaties toegevoegd, dat is de volgende stap als ik dit probleem heb opgelost.
Ben nu nog bezig om dit op te lossen (dat hij die dubbele eruit haalt)

Afbeeldingslocatie: http://i51.tinypic.com/2iau7gn.png

een iteratie ?

Dont blaim me btw over die tabel,
Kreeg hem zo geleverd van me stage begeleider

[ Voor 71% gewijzigd door kokkie20 op 02-11-2010 11:06 ]


Acties:
  • 0 Henk 'm!

  • Robinski
  • Registratie: September 2000
  • Laatst online: 11:29

Robinski

A.K.A. RHarmsen

Heb toch het idee dat je misschien eerst een basis curcus databases (en dan specifiek SQL databases) en C# (en dan specifiek LINQ) moet gaan lezen.

10xAXItec AC-265P = 2,650kWp @ SolarEdge SE2200 - PVOutput


Acties:
  • 0 Henk 'm!

  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 19:07
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
     public static ProductPhotoViewImport GetDoubleSkuNumbersImport() 
        { 
            using (var db = DataContextManager.GetInstance()) 
            { 
                var query = (from t in db.ImportProductImages 
                            where t.ProductSkuNumber.Count() > 1 
                            orderby t.ProductSkuNumber 
                             select t.ProductSkuNumber).First(); 

               var results = query.ToArray();
  
                foreach (ImportProductImage ProductSkuNumber in results) 
                { 
                    db.ImportProductImages.DeleteOnSubmit(ProductSkuNumber); 
                } 
                    db.SubmitChanges(); 
            } 
        }

Als je nu een breakpoint (rode bolletje) op de foreach regel doet, vervolgens debuggen (F5).
Nu kan je zien wat het resultaat van je query is (zweef met de muis over results).
Dat resultaat is denk ik geen lijstje ImportProductImage's als ik je query zo zie.

Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 02-07 12:07
Je kunt zo te werk gaan, (ik ken zelf geen linq):
Vul de entitycollection met zoiets:
SQL:
1
2
3
4
select productskunumber
from t 
group by productskunumber
having (count(productskunumber) > 1)

dan itereer je door de entitycollection en haal je de entities 1 voor 1 op, en selecteert de 1e
SQL:
1
select first(productskunumber) from t where productskunumber = iterator_entity.productskunumber

die entity delete je.
Let op dat als de count(productskunumber) groter is dan 2 er nog steeds dubbele overblijven

Acties:
  • 0 Henk 'm!

  • kokkie20
  • Registratie: December 2009
  • Laatst online: 19-06 18:09
ik zal er even naar kijken,
bedankt voor de tips/suggesties :)

Acties:
  • 0 Henk 'm!

  • kokkie20
  • Registratie: December 2009
  • Laatst online: 19-06 18:09
Probleem is opgelost door dit:

dataGridView1.DataSource = dt;

in dit te veranderen:
DataTable distinctTable = dt.DefaultView.ToTable(true, "ProductSkuNumber");
dataGridView1.DataSource = distinctTable;

Acties:
  • 0 Henk 'm!

  • joppybt
  • Registratie: December 2002
  • Laatst online: 02-07 19:41
kokkie20 schreef op dinsdag 02 november 2010 @ 09:38:
Ook zit er een csv bestand in met afbeeldingen van het product.
Wat moet ik me hier bij voorstellen?
Pagina: 1