2012-01-19 11 views
2

2つの値(MyCaptionとMyValue)を取得する必要がある2つのリストがあります。クエリでの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私はこのリストの1つから直接取得しています。今MyValueを取得するには、otherUserField.FieldNameに基づいて検索する必要があります。 つまり、otherUserField.FieldNameと等しいmyUserFields.FieldNameを見つけてMyValueに割り当てる必要があります。

上記のような単一のクエリで実行できますか?お申し込みください

+0

を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オブジェクトを割り当てますます。http://あなたは2つのコレクションに参加を使用することができます

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に1つ以上の対応するオブジェクトがない場合、例外が発生することに注意してください。 SingleOrDefaultを場所Singleで使用すると、そのような場合にMyValueにnullが割り当てられます。 –