2015-10-27 2 views
0

Что не так в этом запросе?EF GroupBy: не содержит определения для «BriefTitle» и никакого метода расширения «BriefTitle», принимающего первый аргумент типа

var model = 
    SessionObjectsMSurvey.ContractList 
    .Where(y => y.ContractTitle.ToUpper().Contains(upper)) 
    .GroupBy(g => new 
    { 
     g.BriefTitle, 
     g.ContractId 
    }) 
    .Select(
     x => new 
     { 
      label = x.BriefTitle, 
      id = x.ContractId.ToString() 
     }).Take(20); 

SessionObjectsMSurvey.ContractList - это коллекция IEnumerable.

Это не скомпилируется, я получаю;

Ошибка 13 «System.Linq.IGrouping» не содержит определение для «BriefTitle» и нет методы расширения «BriefTitle» принимающей первого аргумент типа «System.Linq.IGrouping» может быть найдено (вы пропали без вести с помощью директивы или сборки ссылку?)

ответ

3

Я думаю, вам нужно вставить .Key в двух местах в вашем .Select(...) вызова. Результат .GroupBy(...) является запросом IGrouping, и этот интерфейс содержит свойство .Key, позволяющее вам получить доступ к ключу вашей группы.

var model = 
    SessionObjectsMSurvey.ContractList 
    .Where(y => y.ContractTitle.ToUpper().Contains(upper)) 
    .GroupBy(g => new 
    { 
     g.BriefTitle, 
     g.ContractId 
    }) 
    .Select(
     x => new 
     { 
      label = x.Key.BriefTitle,     // Here 
      id = x.Key.ContractId.ToString()   // And here 
     }).Take(20); 
+0

Благодарим вас за это. Основной момент, но я не добирался туда. – arame3333

1

Использование ключа, как это:

 label = x.Key.BriefTitle,     
     id = x.Key.ContractId.ToString()   

См this ссылку.

Смежные вопросы

 Смежные вопросы