2015-08-26 4 views
0

у меня есть этот запрос:возвращения указанного типа для Linq запроса с анонимного типа

DbQuery<Logs> logs = context.GetQuery<Logs>(); 
var MessageLogs = 
    logs.Where(
     s => 
      s.DATE == date.Date 
     .GroupBy(s => new {s.DATE, s.ID}) 
     .Select(
      g => new {Date = g.Key.DATE, SID = g.Key.ID, Count = g.Count()}) 
     .GroupBy(x => x.SID, x => new {x.Date, x.Count}); 

и у меня есть эти два classess:

public class Data 
{ 
    public Values[] Val { get; set; } 
    public string Key { get; set; } 
} 

и это:

public class Values 
{ 
    public string type1 { get; set; } 
    public string type2 { get; set; } 
} 

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

EDIT: 

у меня есть этот запрос,

logs.Where(
     s => 
      s.DATE == date.Date 
     .GroupBy(s => new {s.DATE, s.ID}) 
     .Select(
      g => new {Date = g.Key.DATE, SID = g.Key.ID, Count = g.Count()}) 

этот запрос возвращает что-то вроде этого:

key date  count 
---------------------------- 
1021 2012  1 
1021 2013  5 
1022 2001  10 
1023 2002  14 

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

key=1021 and Values[] should be type1=2012, type2=1 and type1=2013, type2=5 
+0

Этот запрос LINQ не будет компилироваться ... мне не совсем ясно, чего вы пытаетесь достичь, на данный момент ... почему вы группируете по дате, когда вы уже фильтровали по дате? –

+0

@JonSkeet Я попытался сделать это более ясным – someone

+0

Вы все еще не исправили запрос, чтобы он скомпилировался ... у вас теперь есть тот же сломанный запрос дважды. Судя по всему, существующий запрос не имеет отношения к делу - все, что важно, это форма вывода. –

ответ

2

Учитывая, что текущий запрос возвращает элементы с ключом/дате/кол, это звучит, как вы, вероятно, просто хочу:

var result = query.GroupBy(
    x => x.Key, 
    (key, rows) => new Data { 
     Key = key, 
     Val = rows.Select(r => new Values { type1 = r.Date, type2 = r.Count }) 
       .ToArray(); 
    }); 

В основном this overload принимает:

  • качестве источника
  • Основной переключатель
  • Преобразование из ключа и сопоставление строк в результирующий элемент (экземпляр Data в вашем случае)
Смежные вопросы