2012-02-24 4 views
0

я сделал метод в моем классе моделей для вызова набора данных из базы данных с помощью кодов ниже:группы по LINQ с C#

public IQueryable result(string username, string exam) 
    { 

     return (from result in idb.User_Exam_Question 
       where (result.User_Tbl_email == username && result.Exam_Tbl_ID == Convert.ToInt32(exam)) 
       group result by result.category_tbl_ID into cat 
       select cat); 
    } 

, но мне нужно подсчитать строки каждой категории. как мне изменить вышеприведенный код, чтобы получить желаемый результат.

большое спасибо

ответ

2

Если вы хотите, чтобы вернуть счет, просто добавьте .Count():

public int result(string username, string exam) 
{ 
    return (from result in idb.User_Exam_Question 
      where (result.User_Tbl_email == username && result.Exam_Tbl_ID == Convert.ToInt32(exam)) 
      group result by result.category_tbl_ID into cat 
      select cat).Count(); 
} 

Или, если вы хотите, чтобы каждый суб-результат в виде графа, вы можете сделать это:

public IQueryable result(string username, string exam) 
{ 
    return from result in idb.User_Exam_Question 
      where (result.User_Tbl_email == username && result.Exam_Tbl_ID == Convert.ToInt32(exam)) 
      group result by result.category_tbl_ID into cat 
      select new 
      { 
       CatCount = cat.Count() 
      } 
} 

Вы можете сделать что-то вроде этого:

result("username", "exam")[0].CatCount; 
// returns the count of the first result of the query. 
+0

Мальчик, должно быть, у вас был выходной день. У IQueryable нет индексатора, метод возвращает только значения count, никакой подсказки для какой категории. И возвращение анонимных типов - это, как правило, плохая идея. –

+0

Спасибо, я пытаюсь вызвать его из контроллера, но он не принял индексацию с помощью []. – user972087

+0

@ GertArnold есть ли какое-либо решение для подсчета строк по группам? – user972087

1

Вы можете получить счет прямо от своей кошки!

public IQueryable result(string username, string exam) 
    { 

     return (from result in idb.User_Exam_Question 
       where (result.User_Tbl_email == username && result.Exam_Tbl_ID == Convert.ToInt32(exam)) 
       group result by result.category_tbl_ID into cat 
       select new { Group = cat , Count = cat.Count() }); 
    } 
Смежные вопросы