Calling a custom method in LINQ query

江枫思渺然 提交于 2019-12-05 09:01:39

问题


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:


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


来源:https://stackoverflow.com/questions/6086574/calling-a-custom-method-in-linq-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!