奇怪的linq问题

时间:2012-06-28 14:34:10

标签: c# .net linq

两者之间的区别是什么?前一个有效,但第二个有错误,说明找不到'选择'。我不明白为什么

第一

Office Office = 
    cHelper.Offices
           .Where(o => o.IP3rdOctet  == OSHelper.Get3rdOctetOfMyIP())
           .FirstOrDefault();

第二

Office Office = 
    from o in cHelper.Offices
                     .Where(o => o.IP3rdOctet == OSHelper.Get3rdOctetOfMyIP())
                     .FirstOrDefault()
    select o;

2 个答案:

答案 0 :(得分:2)

这是 IEnumerableIQueryable,它是Office的实例:

cHelper.Offices.Where(o => o.IP3rdOctet 
                == OSHelper.Get3rdOctetOfMyIP()).FirstOrDefault()

您无法在此致电select。移除对FirstOrDefault()的呼叫,然后您就可以选择结果(如果没有符合您条件的项目,则结果为空)。

如果您仍然需要FirstOrDefault项,请将查询放在括号中并附加FirstOrDefault(),如下所示:

Office Office = (from o in cHelper.Offices
                 where o.IP3rdOctet == OSHelper.Get3rdOctetOfMyIP()
                 select o).FirstOrDefault();

答案 1 :(得分:1)

select适用于IEnumerable,您尝试在FirstOrDefault之后使用选择

像这样重写:

Office Office = (from o in cHelper.Offices
                where o.IP3rdOctet == OSHelper.Get3rdOctetOfMyIP()
                select o).FirstOrDefault();