如何改进这个C#Linq代码?

时间:2013-11-04 22:07:25

标签: .net performance asp.net-mvc-3 linq c#-4.0

customerInfo.Telephone = contactData.Where(d => d.ContactTypeId == (int)ContactType.Phone).FirstOrDefault() != null 
                    ? contactData.Where(d => d.ContactTypeId == (int)ContactType.Phone).FirstOrDefault().Data 
                    : string.Empty;

contactData是IEnumerator。问题是两次运行相同的查询。如果我使用变量,我可以摆脱它,但是有一个新变量需要维护 有没有办法让这些代码更具可读性,并且在不使用任何其他自定义库的情况下使其运行更快?

3 个答案:

答案 0 :(得分:5)

DefaultIfEmpty

尝试以下

customerInfo.Telephone = 
    contactData.Where(d => d.ContactTypeId == (int)ContactType.Phone)
      .DefaultIfEmpty(new Contact {Data = ""})
      .First().Data;

答案 1 :(得分:1)

你可以这样做:

customerInfo.Telephone =
  contactData.Where(d => d.ContactTypeId == (int)ContactType.Phone)
    .Select(d => d.Data)
    .FirstOrDefault() ?? string.Empty;

答案 2 :(得分:0)

我会使用临时变量来防止多次枚举:

var match = contactData.FirstOrDefault(d => d.ContactTypeId == (int)ContactType.Phone);
customerInfo.Telephone = match == null ? string.Empty : match.Data;