我写了以下代码,确发现第一个自定义方法可以执行,第二个不行,会报【LINQ to Entities 不识别方法“System.Linq.IQueryable`1[WinTestApp.Struct.ACCOUNT_TBL] CreateQuery()”,因此该方法无法转换为存储表达式】错误不知道是何原因,请高手指点!
第一个方法: protected IQueryable<ACCOUNT_TBL> orgAccount(DateTime start, DateTime end)
{
return _analysisEntity.ACCOUNT_TBL.Where(c => c.NEWTIME >= start && c.NEWTIME < end && c.DEL_FLAG == false);
}
第二个方法:
public IQueryable<ACCOUNT_TBL> CreateQuery()
{
return _analysisEntity.ACCOUNT_TBL.Where(c => c.DEL_FLAG == false);
}
定义上面两个方法后,写如下语句进行调用会报刚才所说的错,如果把第二个方法内容拿出来,不写在方法内,就可以执行。
var q = from at in orgAccount(start, end)
group at by new { at.NEWTIME.Year, at.NEWTIME.Month, at.NEWTIME.Day }
into at2
select new CountMoney
{
Year = at2.Key.Year,
Month = at2.Key.Month,
Day = at2.Key.Day,
Count = at2.Sum(c => c.INSUTANCE)==0?0:at2.Sum(c => c.INSUTANCE)/CreateQuery().Sum(c => c.CASH + c.INSUTANCE + c.CHEQUE + c.OTHER + c.POS)};
protected IQueryable<ACCOUNT_TBL> orgAccount(DateTime start, DateTime end)
{
return _analysisEntity.ACCOUNT_TBL.Where(c => c.NEWTIME >= start && c.NEWTIME < end && c.DEL_FLAG == false);
}
我在.NET4里写了类似你的代码后可以得到正确的结果。