2012-04-16 2 views
1

나는 _clientList.Add(clientIDGuid, newsfeedClient);Linq를 사용하여 일치하는 ID의 목록을 얻는 방법은 무엇입니까?

NewsfeedClient 클래스와 로그인 한 고객의 사전을 유지하고있다 :

public class NewsfeedClient 
{ 
    /// <summary> 
    /// Represents Newsfeed's own clientID 
    /// </summary> 
    public string ClientIDGuid { get; set; } // also adding the dictionary's ID 

    /// <summary> 
    /// Represents the logged in client's session ID 
    /// </summary> 
    public string SessionID { get; set; } 
    public string Nickname { get; set; } 
    public int ProfileID { get; set; } 

    public GeoLocation Location { get; set; } 

    public List<MyDB.Models.Buddy> BuddyList { get; set; } 

    [ScriptIgnore] 
    public DateTime LastResponseTime { get; set; } 

    public class GeoLocation 
    { 
     public float Latitude { get; set; } 
     public float Longitude { get; set; } 
    } 
} 

Buddy 객체는 ProfileID 속성이 포함되어 있습니다.

일치하는 profileID가 새 클라이언트의 BuddyList에있는 모든 사전 clientID의 목록을 가져 오려고합니다.

here에서 볼 수 있듯이 Intersect 메서드가 작동 할 것으로 추측하고 있지만 적어도 하나의 루프를 만들지 않고 함께 넣는 방법을 잘 모르겠습니다.

- UPDATE -

클라이언트 ID가되지 않고 == profileID가 이들 값은 다르다.

+0

, 명확하게 - 당신이 원하는 하나의 NewsFeedClient의 BuddyList에 포함 된 모든 ProfileId에 대한 모든 NewsFeedClient 객체를 찾으려면? – Tejs

답변

0

내가 제대로 질문을 읽은 가정이 시도 :

var matches = _clientList 
      .Where(c => c.Value.BuddyList.Any(b => b.ProfileID == c.Value.ProfileID)) 
      .Select(c => c.Key) 
      .ToList(); 
+0

프로필 키와 사전 키를 일치 시키려고합니다. 사전 키는 프로필 ID (int)와 일치하지 않는 GUID입니다. 그래서 == 어떤 b.ProfileID의 profileID를 포함하는 사전 키를 원합니다. – ElHaix

+0

아, 죄송합니다. 사전의 Value 항목 인 newsFeedClient의 profileId에있는 BuddyList 프로필 ID와 일치 시키시겠습니까? – mattytommo

+0

오른쪽. 사전 값 목록을 반복 할 수 있다고 생각했지만 루프를 만들 필요가 없었습니다. 따라서 값에 newsfeedClient.BuddyList 목록에있는 profileID가 들어있는 사전 키를 원합니다. – ElHaix

1

는 가정, 나는 그것과 같이해야한다, 당신의 질문이 정확이 : 그래서

var matches = _clientList.ToList() 
    .Select(x => x.Key) 
    .Intersect(currentNewsFeed.BuddyList.Select(x => x.ProfileId)) 
    .ToList(); 
+0

LINQ 쿼리 (_clientList.ToList())에 너무 많은 ToList가있는 것 같습니다 – joce

+0

예, _clientList.ToList()를 수행하면 문제가 해결되지 않습니까? _clientList는 현재 사전입니다 :) – mattytommo

+0

IEnumerable 에는 .Intersect ...가 포함되지 않습니다. 오류가 발생합니다. – ElHaix

관련 문제