如何使用Linq获取匹配ID的列表?

时间:2012-04-16 20:17:59

标签: c# linq collections asp.net-4.0

我正在维护使用_clientList.Add(clientIDGuid, newsfeedClient);

登录的客户词典

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属性。

我想获得所有字典clientID的列表,其中匹配的profileID位于该新客户端的BuddyList中。

我猜测Intersect方法会发挥作用,如here所示,但我不太确定如何在不创建至少一个foreach循环的情况下将它们放在一起。

- 更新 -

clientID不是== ProfileID这些值是不同的。

2 个答案:

答案 0 :(得分:1)

假设我的问题是正确的,应该是这样的:

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

答案 1 :(得分:0)

试试这个,假设我已经正确地阅读了你的问题:

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