在LINQ查询中调用自定义方法

时间:2011-05-22 07:09:51

标签: linq entity-framework linq-to-sql linq-to-entities datacontext

我有这样的查询:

 var q = 
        from u in db.User
        select new
        {
            userId = u.UserId,
            userName = o.Name,
            userAvatar = o.AvatarCode
        };

然后,我必须使用自定义静态方法 Image.GetPath AvatarCode 转换为 AvatarPath

可以通过以下方式实现:

 var q = 
        (from u in db.User
        select new
        {
            userId = u.UserId,
            userName = o.Name,
            userAvatar = o.AvatarCode
        })
        .AsEnumerable()
        .Select(new
        {
            userId = u.UserId,
            userName = o.Name,
            userAvatar = Image.GetPath(o.AvatarCode)
        };

但是如果对象字段的数量很大,那么复制第二个选择中的所有字段就太过分了。

还有其他选择吗?

例如,一些标记应在查询执行后执行的方法的方法:

 var q = 
        from u in db.User
        select new
        {
            userId = u.UserId,
            userName = o.Name,
            userAvatar = Linq.ExecuteLater(Image.GetPath(o.AvatarCode))
        };

1 个答案:

答案 0 :(得分:0)

没有任何此类方法,但如果问题只是在第二个选择中必须再次指定的字段数,则可以执行以下操作:

var q = 
    (from u in db.User
    select new
    {
        userId = u.UserId,
        userName = u.Name,
        userAvatar = u.AvatarCode
    })
    .AsEnumerable()
    .Select(u => new
    {
        User = u,
        Path = Image.GetPath(u.AvatarCode)
    });