2013-08-02 2 views
0

Я хочу вывода результатов Linq к IEnumerable списка, но я получаю ошибку произнесения:Ошибка при объединении в Linq запрос

IEnumerable<vwHour> Total = (from p in vwHours.Where(ph => ph.UserName == UserName()) 
           group p by p.Date into g 
           select new {Date = g.Key.Value.ToString("mm/dd/yy"), Total = g.Sum(p => p.Hours),}); 

Сообщение об ошибке:

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<UI.Models.vwHour>'. An explicit conversion exists (are you missing a cast?) 

я упускаю что-нибудь здесь?

ответ

1

Вы пытаетесь поместить список анонимного типа в переменную для списка vwHour.

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

var Total = ( ... 

Если вы действительно хотите, этот запрос возвращает список vwHour, вам необходимо изменить select:

select new vwHour { ... 

Но это требует, чтобы vwHour имеет Total свойство и string Date свойства. Но из статей group by и select мы можем видеть, что ваш тип vwHour уже имеет свойство Date, которое кажется Nullable<DateTime>. Таким образом, нет никакого способа, чтобы select работал, если вы измените его, чтобы создать vwHour s.

Если ваш класс vwHour это что-то вроде этого:

class vwHour 
{ 
    public object UserName { get; set; } 
    public DateTime? Date { get; set; } 
    public int Hours { get; set; } 
} 

Тогда это будет работать:

IEnumerable<vwHour> Total = 
    (from p in vwHours.Where(ph => ph.UserName == UserName()) 
    group p by p.Date into g 
    select new vwHour { Date = g.Key, Hours = g.Sum(p => p.Hours), }); 
+0

Спасибо за объяснение! Вы можете обновить свой ответ на vwHour() {... – user793468

+1

@ user793468:() необязательно в синтаксисе инициализатора объекта. http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx –

2
IEnumerable<vwHour> Total = (from p in vwHours.Where(ph => ph.UserName == UserName()) 
          group p by p.Date into g 
          select new vwHour(){ //<---- 
              Date = g.Key.Value.ToString("mm/dd/yy"), 
              Total = g.Sum(p => p.Hours) 
             }); 
Смежные вопросы