我有一个从 EF 模型返回数据的方法。
我收到上述消息,但我不知道如何规避该问题。
public static IEnumerable<FundedCount> GetFundedCount()
{
var today = DateTime.Now;
var daysInMonth = DateTime.DaysInMonth(today.Year, today.Month);
var day1 = DateTime.Now.AddDays(-1);
var day31 = DateTime.Now.AddDays(-31);
using (var uow = new UnitOfWork(ConnectionString.PaydayLenders))
{
var r = new Repository<MatchHistory>(uow.Context);
return r.Find()
.Where(x =>
x.AppliedOn >= day1 && x.AppliedOn <= day31 &&
x.ResultTypeId == (int)MatchResultType.Accepted)
.GroupBy(x => new { x.BuyerId, x.AppliedOn })
.Select(x => new FundedCount(
x.Key.BuyerId,
x.Count() / 30 * daysInMonth))
.ToList();
}
}
FundedCount 不是 EF 实体,MatchHistory 是,所以无法理解它为什么会提示。
感谢所有建议。
最佳答案
它提示的原因是因为它不知道如何将您的 Select()
翻译成 SQL 表达式。如果您需要对不是实体的POCO进行数据转换,您应该先从EF获取相关数据,然后将其转换为POCO。
在您的情况下,它应该像之前调用 ToList()
一样简单:
return r.Find()
.Where(x => x.AppliedOn >= day1 && x.AppliedOn <= day31 &&
x.ResultTypeId == (int)MatchResultType.Accepted)
.GroupBy(x => new { x.BuyerId, x.AppliedOn })
.ToList() // this causes the query to execute
.Select(x => new FundedCount(x.Key.BuyerId, x.Count() / 30 * daysInMonth));
但是要小心,并确保尽可能地限制 ToList()
返回的数据集的大小,这样您就不会试图加载一个整个表到内存中。
关于c# - LINQ to Entities 消息中仅支持无参数构造函数和初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17367649/