22. april 2009 - 15:44Der er
14 kommentarer og 2 løsninger
Linq to sql eller linq to entity
Hejsa,
Jeg har den senere tid kigget nærmere på .net's mvc platform og i denne forbindelse er jeg også begyndt at kigge på Linq to sql og linq to entity.
Men hvilke af de 2 er at anbefale ? Jeg kan se ud fra flere blog indlæg at der har været en større diskution igang om, at Linq to sql skulle være på vej ud/erstattes af linq to entity, men i en video fra MIX09 slås det fast at linq to sql ikke er død.
Ok, men når jeg læser lidt om linq to entity på diverse blogs, snakkes der meget om at det er noget tungere end linq to sql, men der er jo absolut ingen mening i at kaste sig over noget der med tiden vil dø.
Enig med arne - LINQ 2 SQL er kun et slags proof of concept og var egentlig ikke tiltænkt som release hvorimod EF er. EF har problemer med performance - mange problemer skyldes at man benytter det forkert men der er også ting man ikke helt er herre over og som i visse tilfælde er umulige at gøre noget ved.
For at trække en liste af kategorier med tilhørende produkter : Kategori 1 - Produkt 1 - Produkt 2
Kategori 2 - Produkt 3 - Produkt 4
Kategori 3 - Produkt 5 - Produkt 6
har jeg lavet en metode i datalaget getCategoriesWithProducts(), men da jeg laver et kryds over 2 tabeller er der hverken tale om et object af kategorier eller produkter men et annonymt object.
Hvad skal return typen af min metode så være ?
public function EtEllerAndet<> getCategoriesWithProducts() { . . . min linq forspørgelse . . . }
Var der tale om en liste af kategorier eller produkter ville jeg jo blot sende den retur som List<>, IEnumerable<>, IQueryable<> eller hvad der nu ville passe til den givne situation.
tror ikke helt at jeg forstår - så mit første gæt må være at du skal selecte alle kategorier ud og include produkter. Så får du en liste ud af kategorier alle med produkterne under sig. Ellers så skal du ud over de objekter EF giver dig og lave dit eget objekt.
Ok, et eksempel er måske på sin plads. Hvis jeg laver denne linq i en metode:
public EtEllerAndet<> getCategoriesWithProducts() var query = from k in Kategorier join p in Produkter on k.Id equals p.CatId select new { k.Id, k.Kategori, p.Id, p.Produkt }; return query; }
Så skal min metode have en eller anden return type, men hvad skal det være ?
public EtEllerAndet<> getCategoriesWithProducts() var query = from k in Kategorier join p in Produkter on k.Id equals p.CatId select new { KatId = k.Id, Kategori = k.Kategori, ProdId = p.Id, Produkt = p.Produkt }; return query; }
så er det sikkert mig der ikke forstår det - for typen du sender retur skal du jo selv definere enten i dit udtræk (som i første link), en af de indbyggede metoder eller ved at efterbehandle det.
A method cannot return a query, if the query ends in the 'new' operator
The trick is to project into an ordinary named type with an object initializer:
public IQueryable<NameDetails> GetCustomerNamesInState (string state) { return from c in Customer where c.State == state select new NameDetails { FirstName = c.FirstName, LastName = c.LastName }; }
NameDetails is a class that you'd define as follows:
public class NameDetails { public string FirstName, LastName; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.