0

次の2つの違いは何ですか?最初の1つは機能しますが、2番目の1つは、「選択」が見つからないことを示すエラーが発生します。理由がわかりません。

1位:

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

2番目:

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

2 に答える 2

2

これはまたはではなく、:のインスタンスです。IEnumerableIQueryableOffice

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で動作し、IEnumerable後にselectを使用しようとしていますFirstOrDefault

次のように書き直します。

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