2009-12-31 2 views
4

У меня есть данные, как этотКак groupBy в linq для sql?

id = 1<pk> 
SDate = 12/12/2009 
EDate = 12/12/2009 
binding = a_1 
userid = 14 

id = 2<pk> 
SDate = 12/12/2009 
EDate = 12/12/2009 
binding = a_1 
userid = 14 

Я хочу, чтобы сгруппировать мои данные путем связывания. Я не уверен, как это сделать. Должен ли я сделать новый выбор для этого?

до сих пор у меня есть этот

Db.Table.Where(u => u.UserId == userId && u.Binding == binding) 
       .GroupBy(u => u.Binding) 

Так что я хочу, чтобы вернуть все столбцы. Должен ли я идти

.select(group = new Table {....}); 

ответ

5

Помните, что Linq GroupBy не похож на SQL GroupBy SQL. Linq GroupBy возвращает .Key (что и есть ваша группа по условию), а затем IEnumerable <> того, что вы группируете. Так что если вы хотите, подсчет всех строк для каждой привязки наряду с обязательными себя, это было бы:

var bindingsAndCounts = 
    Db.Table.Where(u => u.UserId == userId && u.Binding == binding) 
       .GroupBy(u => u.Binding) 
       .Select(g => new {g.Key, BindingCount = g.Count()}); 

Это намного более мощный конструкта, чем с SQL, потому что вы можете делать что угодно с «g» в выражении.

Если вы хотите перечислить через каждую группу можно опустить выбрать:

foreach (var group in whateveryourgroupingExpressionWas) { 
    Console.WriteLine(group.Key); 
    foreach (var row in group) { 
     Console.WriteLine("ID: " + row.Id + "Name " + row.Name ...); 
    } 
} 
+0

Хм, я не знаю, что. но в вашем случае там вы не используете groupBy, который вы используете select. – chobo2

+0

Это после .GroupBy(). Выберите() –

+0

Итак, я использую свою группу, пока у меня есть, а затем добавьте выбор, похожий на выше? – chobo2