在LINQ Select中多次调用First()是不是很糟糕?

ben*_*wey 3 c# linq

我有一个LINQ语句,我想在First地址中合并昵称为'Me'.

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
         };
}
Run Code Online (Sandbox Code Playgroud)

我在想:

  1. 如果我像这样多次调用First会不会影响性能呢?
  2. 是否有更好的LINQ语句?
  3. 刚刚意识到,我是否需要.包括("地址")?

Mar*_*ell 10

对于LINQ to SQL,EF等,它可能无关紧要 - 完全有可能TSQL转换无论如何都会使它相同.当然,你可以确定一下;-p

但对于LINQ到对象(这是非常字面的)它会.您可以使用let以下方法改进:

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
     };
Run Code Online (Sandbox Code Playgroud)