2009-03-28 8 views
3

Ich habe eine LINQ-Anweisung, wo ich in der ersten Adresse mit dem Spitznamen von 'Ich' zusammenführen möchte.Ist es schlecht, First() mehrmals in einem LINQ Select aufzurufen?

using (var ctx = new DataEntities()) 
{ 
    return from c in ctx.Customers.Include("Addresses") 
     let m = from a in c.Addresses where a.Nickname == "Me" select a 
     where m.Any() 
     select new 
     { 
      Id = c.CustomerId, 
      m.First().Name, 
      m.First().Address1, 
      m.First().Address2, 
      m.First().City, 
      m.First().State, 
      m.First().Zip, 
      m.First().Email, 
      m.First().PhoneNumber 
     }; 
} 

Ich frage mich:

  1. Ist es Leistung wehtun, wenn ich das erste mehrfach wie nennen?
  2. Gibt es eine bessere LINQ-Anweisung dafür?
  3. Gerade auch realisiert, muss ich .Include ("Adressen")?

Antwort

11

für LINQ to SQL, EF, usw., es wahrscheinlich spielt keine Rolle - es ist durchaus möglich, dass die TSQL Übersetzung sowieso es identisch machen. Natürlich können Sie Profil sicher sein; -p

Aber für LINQ-to-Objects (die sehr wörtlich ist) wird es. Sie können diese let unter Verwendung verbessern:

return from c in ctx.Customers.Include("Addresses") 
    let m = from a in c.Addresses where a.Nickname == "Me" select a 
    where m.Any() 
    let first = m.First() 
    select new 
    { 
     Id = c.CustomerId, 
     first.Name, 
     first.Address1, 
     ... 
     first.PhoneNumber 
    }; 
+0

von diesem Sinne kann ich mich nur lassen = c.Addresses.FirstOrDefault (a.Nickname == "Me")? – bendewey

+0

dann vergleichen wo ich! = Null – bendewey

+0

Auch nur für den Rekord benutze ich LINQ zu EF – bendewey

Verwandte Themen