我想实现以下目标:
return (from a in db.Tags
select new TagItem
{
ID = a.Id,
Name = a.Name
});
..但我不想那样实现它,因为我需要在其他地方使用完全相同的TagItem结构(用于连接)
所以这就是为了调用一个为我构造TagItem的方法的意图:
return (from a in db.Tags
select ConstructTagItem(a));
该方法以相同的方式构造对象:
private TagItem ConstructTagItem(Tag a)
{
return new TagItem { ID = a.Id, Name = a.Name};
}
但是这给了我以下错误:
方法'TagItem ConstructTagItem(Tag)'没有受支持的翻译 SQL。
有没有办法实现这个目标?
解决方案(感谢Daniel Hilgarth):
return db.Tags.Select(ConstructTagItem);
方法:
private Expression<Func<Tag, TagItem>> ConstructTagItem
{
get { return a => new TagItem {ID = a.Id Name = a.Name }; }
}
答案 0 :(得分:3)
是的,有。您需要使用这样的表达式树:
Expression<Func<Tag, TagItem>> constructTagItem = a => return new TagItem
{ ID = a.Id,
Name = a.Name};
然后您可以使用该表达式而不是您的方法:
return db.Tags.Select(constructTagItem);
根据this article,您需要使用定义查询的方法链方式。