我在我的存储库中有以下调用,其中我返回Node的IQueryable(我的业务对象类)然后我在我的服务层中有一个过滤器函数,它添加到IQueryable调用并按id过滤存储库函数GetNodes。当我将FilterById作为列表返回时(因此它执行)我得到错误 - 成员'bo.Node.Id'没有支持的SQL转换。 -
在将非linq生成的类作为IQueryable返回时,有没有办法解决这个错误?
public IQueryable<bo.Node> GetNodes()
{
return (from item in Db.Nodes select new bo.Node(item.id,
item.created, item.lastupdated, item.name,
item.parentid, item.siteid, item.userid));
}
在我的服务层
private IQueryable<bo.Node> FilterById(IQueryable<bo.Node> source, Guid id)
{
return source.Where(i => i.Id.Equals(id))
}
答案 0 :(得分:2)
不要使用Node构造函数,而是使用属性初始化:
return (
from item in Db.Nodes select new bo.Node{
item.id, item.created, item.lastupdated, item.name,
item.parentid, item.siteid, item.userid
});
afaik通过使用构造函数,您不会在表达式中提供与其他属性匹配的任何信息。除了结果实例基于构造函数中的任何逻辑,因此没有任何有效的假设linq可以做出那些......除了在返回它的实例时调用构造函数。