0

以下两者有什么区别?第一个有效,但第二个错误指​​出找不到“选择”。我不明白为什么。

第一个:

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

2 回答 2

2

不是IEnumerableor ,它是 的一个IQueryable实例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();
于 2012-06-28T14:37:32.660 回答
1

select与 a 一起使用IEnumerable,您尝试在之后使用 selectFirstOrDefault

像这样重写:

Office Office = (from o in cHelper.Offices
                where o.IP3rdOctet == OSHelper.Get3rdOctetOfMyIP()
                select o).FirstOrDefault();
于 2012-06-28T14:37:08.040 回答