Calling a custom method in LINQ query

2020-06-27 03:43发布

I have a query like this:

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

Then, I have to transform AvatarCode to AvatarPath using custom static method Image.GetPath.

It's possible to make this in the following way:

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

But if the number of object fields is large then it's an overkill to duplicate all fields in the second Select.

Are there any alternatives?

For example, some approach to mark methods that should be executed after query execution:

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

1条回答
在下西门庆
2楼-- · 2020-06-27 04:21

There is not any such method but if the problem is only number of fields which must be specified again in the second select you can do something like this:

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)
    });
查看更多
登录 后发表回答