为什么我不能作为实现ISite的新自定义类(cms.bo.Site)返回?
public IQueryable<ISite> GetSites()
{
return (from site in Db.Sites select new cms.bo.Site(site.id, site.name));
}
答案 0 :(得分:4)
基本上LINQ to SQL不知道构造函数会做什么 - 它想尝试将其转换为SQL查询,但不知道如何。您是否需要能够在之后为查询添加额外的位?如果没有,你可以这样做:
public IEnumerable<ISite> GetSites()
{
return Db.Sites.Select(x => new { x.id, x.name }) // Project in SQL
.AsEnumerable() // Do the rest in process
.Select(x => new cms.bo.Site(x.id, x.name))
.Cast<ISite>(); // Workaround for lack of covariance
}
编辑:我错过了方差方面,并假设查询在执行时失败了。根据tvanfosson的回答,完全值得尝试调用Cast<ISite>()
- 但如果这不起作用,请尝试以上方法:)
答案 1 :(得分:3)
试试这个:
return Db.Sites
.ToList()
.Select( s => new cms.bo.Site( s.id, s.name ) )
.Cast<ISite>()
.AsQueryable();