2012-01-19 154 views
2

我有兩個列表,我必須從中獲取兩個值(MyCaption和MyValue)。在查詢中的Linq子查詢

List<UserInfoModel> userInfo = new List<UserInfoModel>(); 

List<myuser_field> myUserFields = GetMyUserFields(); 
var otherUserFields = otherUserService.GetOtherUserFields(); 

userInfo = (from otherUserField in otherUserFields 
       where otherUserField.Chosen == true 
        select new UserInfoModel { 
         MyCaption = otherUserField.FieldAlias, 
         MyValue = 
        }).ToList(); 

MyCaption我直接從列表中獲得一個。現在要獲取MyValue,我需要根據otherUserField.FieldName來查找。 即我必須找到myUserFields.FieldName,它等於otherUserField.FieldName並將其分配給MyValue。

可以在上面的單個查詢中完成嗎?請建議

+0

您可以使用帶有兩個集合聯接:HTTP:// weblogs.asp.net/rajbk/archive/2010/03/12/joins-in-linq-to-sql.aspx – H27studio

回答

3
userInfo = (from myUserField in myUserFields 
      join otherUserField in otherUserFields 
      on myUserField.FieldName == otherUserField.FieldName 
      where otherUserField.Chosen == true 
      select new UserInfoModel { 
       MyCaption = otherUserField.FieldAlias, 
       MyValue = myUserField.FieldName 
      }).ToList(); 
0

從你的問題,它不是很清楚你想分配給MyValue。

下面將指派其具有當前列舉myuser_object的字段名相匹配(otherUserField.FieldName)一個字段名的myuser_field對象:

List<UserInfoModel> userInfo = new List<UserInfoModel>(); 

List<myuser_field> myUserFields = GetMyUserFields(); 
var otherUserFields = otherUserService.GetOtherUserFields(); 

userInfo = (from otherUserField in otherUserFields 
       where otherUserField.Chosen == true 
        select new UserInfoModel { 
         MyCaption = otherUserField.FieldAlias, 
         MyValue = myUserFields.Single(uf => uf.FieldName == otherUserField.FieldName) 
        }).ToList(); 
+1

請注意,如果myUserFields中沒有或多個對應的對象,您將會得到一個異常。在這種情況下,使用SingleOrDefault in Single,以將null分配給MyValue。 –