2

一個自定義的方法我有這樣的查詢:在調用LINQ查詢

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

然後,我不得不改變AvatarCode使用自定義靜態方法Image.GetPathAvatarPath

這有可能使這個以下列方式:

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

你的代碼示例看起來不是邏輯。 1)你的第一個'select'中的'o'是什麼? 2)爲什麼在第二個「選擇」中重複引用'u'和'o',甚至沒有引用當前的收集元素。所以你的第二個選擇應該是這樣的:'Select(i => new {userId = i.userId})'等等 – Genius 2011-05-23 08:32:57

回答

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