2012-06-28 4 views
0

В чем разница между 2. Первые 1 работы, но 2-я ошибка, заявив, что «Выбрать» не может быть найден. Я не могу понять, почемустранный вопрос linq

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; 
+3

Не уверен, почему вы делаете из/выбрать, когда вы уже получаете FirstOrDefault , – Narnian

+0

Не знаете, почему смешиваются разные стили (синтаксис запроса и синтаксис метода расширения) – MBen

+0

Обе концепции компилируются для меня, используя Список ! – SpaceBison

ответ

2

Это неIEnumerable или 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(); 
1

select работает с IEnumerable, вы пытаетесь использовать выбор после FirstOrDefault

переписывают, как это:

Office Office = (from o in cHelper.Offices 
       where o.IP3rdOctet == OSHelper.Get3rdOctetOfMyIP() 
       select o).FirstOrDefault(); 
Смежные вопросы