Linq to SQL在外部构造自定义对象

时间:2011-07-20 11:11:35

标签: linq linq-to-sql

我想实现以下目标:

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 }; }
}

1 个答案:

答案 0 :(得分:3)

是的,有。您需要使用这样的表达式树:

Expression<Func<Tag, TagItem>> constructTagItem = a => return new TagItem
                                                       { ID = a.Id, 
                                                         Name = a.Name};

然后您可以使用该表达式而不是您的方法:

return db.Tags.Select(constructTagItem);

根据this article,您需要使用定义查询的方法链方式。