Как конвертировать iqueryable <string>в строку в linq? - PullRequest
0 голосов
/ 29 марта 2012

У меня есть следующий фрагмент кода. в котором я просто хочу вернуть PartyName в виде строки. но я получаю сообщение об ошибке: «Невозможно преобразовать тип« System.Linq.Iqueryable в строку ». если я хочу вернуть только строку, что делать? пожалуйста, помогите мне.

return objDatabase.FAPARs .Where(f => (f.PARTY_CODE == "P003")) .Select(f => f.PARTY_NAME);

Ответы [ 5 ]

5 голосов
/ 29 марта 2012

IQueryable<string> представляет запрос, который может вернуть любое количество строк .Вам нужна одна строка - поэтому вам нужно решить, что делать в различных ситуациях:

  • Что вы хотите сделать, если у запроса нет результатов?
  • Что вы хотите сделать, если запрос имеет один результат?(Я предполагаю, что это просто:)
  • Что вы хотите сделать, если запрос имеет более одного результата?

Набор методов, которые позволяют вам определить все этоявляются:

  • Single - сбой, если нет точно один результат
  • SingleOrDefault - сбой, если более одного результата, вернуть нольесли нет результатов
  • First - завершиться неудачей, если результатов нет, вернуть первое из многих
  • FirstOrDefault - вернуть ноль, если результатов нет, или первое из многих
  • Last - ошибка, если результатов нет, возвращает последнее из многих
  • LastOrDefault - возвращает ноль, если результатов нет, или последнее из многих

В каждом случае «fail» означает «выбросить исключение».(IIRC всегда InvalidOperationException, по крайней мере, в LINQ to Objects, но я могу ошибаться.)

Так что, если вы запрашиваете идентификатор, который должен существовать (т.е. этоошибка, если это не так) тогда Single, вероятно, уместно.Если вы запрашиваете идентификатор, который может не существовать , используйте SingleOrDefault и проверьте, является ли возвращаемое значение нулевым.Если вы не запрашиваете идентификатор, вы , вероятно, хотите использовать FirstOrDefault или просто перебирать результаты.

(Обратите внимание, что значением по умолчанию являетсяnull связано с тем, что это запрос, возвращающий строки, а строка является ссылочным типом. Как правило, это значение по умолчанию для типа элемента - поэтому, если у вас есть IQueryable<int>, возвращаемое значение по умолчанию будет 0.)

0 голосов
/ 29 марта 2012
 return objDatabase.FAPARs.OfType<FAPAR>()
                .Where(f => (f.PARTY_CODE == PartyCode && f.COMP_NO == ComCode))
                .Select(f => f.PARTY_NAME).SingleOrDefault();
0 голосов
/ 29 марта 2012

Попробуйте

return objDatabase.FAPARs .Where(f => (f.PARTY_CODE == "P003")) .Select(f => f.PARTY_NAME).SingleOrDefault();
0 голосов
/ 29 марта 2012

Попробуйте это:

return objDatabase.FAPARs.Where(f => (f.PARTY_CODE == "P003")).Single(f => f.PARTY_NAME);
0 голосов
/ 29 марта 2012
return objDatabase.FAPARs.FirstOrDefault(f => f.PARTY_CODE.Equals("P003")).PARTY_NAME 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...