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

时间:2009-03-28 22:18:27

标签: c# linq

我有一个LINQ语句,我想在第一个地址中合并昵称为'我'。

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
         };
}

我想知道:

  1. 如果我这样多次打电话给第一次会不会影响性能?
  2. 对此有更好的LINQ声明吗?
  3. 刚刚意识到,我是否需要。包括(“地址”)?

1 个答案:

答案 0 :(得分: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
     };