Вызов пользовательского метода в запросе LINQ - PullRequest
2 голосов
/ 22 мая 2011

У меня такой запрос:

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

Затем я должен преобразовать AvatarCode в AvatarPath , используя пользовательский статический метод Image.GetPath.

Это можно сделать следующим образом:

 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 голосов
/ 22 мая 2011

Нет такого метода, но если проблема заключается только в количестве полей, которые должны быть указаны снова при втором выборе, вы можете сделать что-то вроде этого:

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