c# - 如何加入 2 个列表,其中一个列表包含 2 个元素?

标签 c# linq lambda

据我所知,LINQ 和 lambda 表达式是解决我的特定问题的方法。在我的办公室,我有一个二维数组 [X 长度][2 宽度] 的 IM 日志列表,这样我就可以看到谁给谁发了 IM。但日志包含 3 位用户 ID 而不是实际姓名。

arrIMLog[x][1]

因此,日志条目可能看起来像这样 arrIMLog[0][0] = 353 和 arrIMLog[0][1] = 563 意味着用户 353 IM'ed 用户 563。然后,我有一个用户 ID 列表为此,我想通过搜索日志来了解他们向谁发送了即时消息。

lstSuspects

例如,lstSuspects(1) = 353、lstSuspects(2) = 563 等。我想创建一个新的简单列表 lstSuspectsContacted,这样我就可以找出 lstSuspects 上的每个人联系过的唯一用户 ID (# of times 并不重要,然而)。我该怎么做?

var lstSuspectsContacted = (from x in arrIMLog
                            join y in lstSuspects 
             on arrIMLog[0] or arrIMLog[1] equals lstSuspects // join criteria
             select new { arrIMLog[0] or arrIMLog[1]}).ToList();

我遇到的困难是我想选择数组中的 [0] 或 [1] 元素,具体取决于 lstSuspects 和另一个元素 [1] 或 [0] 中的 arrIMLog 是否匹配].我不知道如何实现这一点。

最佳答案

这是一个可能看起来更冗长但将更具可扩展性和可读性的解决方案

您首先定义您的日志并怀疑 POCO。

    public class Log
    {
        /// <summary>
        /// Person initiating the contact
        /// </summary>
        public int From { get; set; }

        /// <summary>
        /// Person that was contacted
        /// </summary>
        public int To { get; set; }
    }

    public class SuspectConnection
    {
        public int SuspectId { get; set; }

        public List<int> Contacts { get; set; }
    }

然后您可以使用 LINQ 轻松找到连接。

    var suspectConnections = new List<SuspectConnection>();

    foreach (var suspect in suspects)
    {
        var connection = new SuspectConnection() { SuspectId = suspect };

        connection.Contacts = logs.Where(x => x.From == suspect || x.To == suspect).Select(x => x.From == suspect ? x.To : x.From).ToList();
        suspectConnections.Add(connection);
    }

关于c# - 如何加入 2 个列表,其中一个列表包含 2 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19484391/

相关文章:

c# - RegularExpression 属性 - 传入类的属性字段

.net - Linq To 实体查询异常

java - 在 Spark JavaRDD 转换中使用可序列化的 lambda

c# - 头像显示 Visual Studio 更改查询

javascript - 如何终止 SignalR 连接?

c# - 比较对象和返回列表

c# - 在 LINQ 中加入列并运行包含运算符

c# - EF5 : LINQ to Entities does not recognize the method System. 可空系统。十进制中位数

python - 嵌套作用域和 Lambda

Matlab 匿名函数 If else