此代码构建没有问题但在执行时失败:
var query =
_db.STEWARDSHIP
.OrderByDescending(r => r.VisitDate)
.Where(r => SiteId == null || r.SiteAssoc.Id == iSiteId)
.Where(r => r.MarkedForDeletion == false)
.Select(r => new SearchResults(r.Id,
r.SiteAssoc.Name,
r.VisitDate,
r.VisitTypeValAssoc.Description));
错误消息是:
Only parameterless constructors and initializers are supported in LINQ to Entities.
我在这里做错了什么?我必须将info传递给构造函数以构建SearchResults对象。有没有办法做到这一点,或者我必须使这个步骤为两步,我得到结果然后迭代结果来创建新对象?
更新
将选择更改为此可解决问题:
.Select(r => new SearchResults(){Id = r.Id,
Name = r.SiteAssoc.Name,
VisitDate = r.VisitDate,
VisitType = r.VisitTypeValAssoc.Description});
答案 0 :(得分:1)
试试这个
.OrderByDescending(r => r.VisitDate)
.Where(r => SiteId == null || r.SiteAssoc.Id == iSiteId)
.Where(r => r.MarkedForDeletion == false)
.Select(r => new SearchResults()
{
ID = Ir.Id,
Name = r.SiteAssoc.Name,
VisitDate = r.VisitDate,
Description = r.VisitTypeValAssoc.Description
});
答案 1 :(得分:1)
可以在查询之外创建实体并将其插入到数据中 使用DataContext存储。然后,您可以使用查询检索它们。 但是,您无法将实体创建为查询的一部分。
请参阅此帖子Explicit construction of entity type '###' in query is not allowed.
LINQ不允许在select语句中显式构造对象。