2012-06-28 39 views
0

2之間的區別是什麼2.第一個作品,但第二個錯誤說明'選擇'找不到。我無法理解爲什麼奇怪的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; 
+3

不知道爲什麼你從做/選擇,當你已經接到了firstordefault 。 – Narnian

+0

不確定爲什麼要混合不同的樣式(查詢語法與擴展方法語法) – MBen

+0

這兩個概念使用List 爲我編譯! – SpaceBison

回答

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

select作品與IEnumerable,你想後FirstOrDefault

改寫這樣的使用選擇:

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