2015-10-20 88 views
0

喂,我有一个LINQ查询是这样的:无法隐式转换类型“System.Linq.IQueryable <AnonymousType#6>”到“小数”

var data = from d in db.DailyBonus 
        where d.Date>= startDate1 && d.Date<=endDate1 
        group d by new { Em = d.Employee.Id } into g 
        select new BasisViewModel 
        { 
         EmployeeId = g.Key.Em, 
         EmployeeNumber = g.FirstOrDefault().Employee.EmployeeNumber, 
         FullName = g.FirstOrDefault().Employee.FullName, 
         HK1 = (decimal)g.FirstOrDefault().ManDays, 
         Basis1 = (decimal)g.FirstOrDefault().BonusBase, 
         HK2 = (
           (from d in db.DailyBonus 
           where d.Date>= startDate2 && d.Date<=endDate2 
           group d by new { Em = d.Employee.Id } into g2 
           select new 
           { 
           Mandays = g.FirstOrDefault().ManDays <-- this is decimal type 
           } 
          ), 
        }; 

的问题是,我只是想选择一个记录为HK2和子查询分配到的人力,时间,但有波纹管的错误:

无法隐式转换类型 “System.Linq.IQueryable”到“小数”

解决方案是什么?谢谢

+0

HK2的模式是什么? –

+0

您需要确定'g.FirstOrDefault()'不会为空。如果可以的话 - 那么有一天你会得到'NullReferenceException' :) –

回答

4

不是返回匿名类new {...}

select new 
    { 
     Mandays = g.FirstOrDefault().ManDays <-- this is decimal type 
    } 

回报Decimal你想要的:

select g.FirstOrDefault().ManDays; 
+0

短而简单,假设HK2是一个十进制类型,不是复杂类型 –

+0

现在错误改变为'不能隐式转换类型'System.Linq.IQueryable '在db.DailyBonus 为“decimal'' '从d,其中通过新的{EM = d.Employee.Id} d.Date> = startDate2 && d.Date <= ENDDATE2 组d到G2 选择g.FirstOrDefault ().ManDays'这样? – Mamen

+3

@Mamen:看起来'HK2'只是一个'Decimal',所以你必须从整个查询中取一个项目;即'HK2 =(...)。FirstOrDefault();' –

1

你应该再添FirstOrDefault()到底和使用简单的值,而不是匿名类型:

var data = from d in db.DailyBonus 
         where d.Date>= startDate1 && d.Date<=endDate1 
         group d by new { Em = d.Employee.Id } into g 
         select new BasisViewModel 
         { 
          EmployeeId = g.Key.Em, 
          EmployeeNumber = g.FirstOrDefault().Employee.EmployeeNumber, 
          FullName = g.FirstOrDefault().Employee.FullName, 
          HK1 = (decimal)g.FirstOrDefault().ManDays, 
          Basis1 = (decimal)g.FirstOrDefault().BonusBase, 
          HK2 = (
            (from d in db.DailyBonus 
            where d.Date>= startDate2 && d.Date<=endDate2 
            group d by new { Em = d.Employee.Id } into g2 
            select g.FirstOrDefault().ManDays <-- this is simple value now 

           ).FirstOrDefault(),<--this is another first or default 
         }; 
相关问题