Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于公共列在列表2的第2列的列表1的第1列中插入值_C#_Asp.net_List_Linq_Join - Fatal编程技术网

C# 基于公共列在列表2的第2列的列表1的第1列中插入值

C# 基于公共列在列表2的第2列的列表1的第1列中插入值,c#,asp.net,list,linq,join,C#,Asp.net,List,Linq,Join,清单1: 清单2: | User Id | Latest | +---------------------+------------------+ | 1 | 1 | | 2 | 3 | | 3 | 3 | | 4 |

清单1:

清单2:

|      User Id        |    Latest        |
+---------------------+------------------+
|          1          |         1        |
|          2          |         3        |
|          3          |         3        |
|          4          |         0        |
我想将
List1
Latest
列的值插入
List2
Latest
列,这是基于连接/比较两个列表中
User Id
列的值

我可以使用foreach循环,但我想那会运行n*m,看起来很难看。有没有一种方法可以使用LINQ或高效地实现这一点

问候。
朱奈德

试试这样。这可以通过将最新值从列表1添加到列表2来解决您的问题

var result = from i1 in List1
             join i2 in List2
             on i1.UserId equals i2.UserId
        select new
        {
            i2.UserId,
            i1.Latest,
            i2.Rating
        };

试试这样的。这可以通过将最新值从列表1添加到列表2来解决您的问题

var result = from i1 in List1
             join i2 in List2
             on i1.UserId equals i2.UserId
        select new
        {
            i2.UserId,
            i1.Latest,
            i2.Rating
        };

您可以使用
LINQ

请尝试以下代码:

List2.AddRange(List1.Select(user => new List1{
     Latest = user.Latest, 
     UserID = user.UserID
   }));

请注意,
Latest
必须是
null

您可以使用
LINQ

请尝试以下代码:

List2.AddRange(List1.Select(user => new List1{
     Latest = user.Latest, 
     UserID = user.UserID
   }));
请注意,
Latest
必须是
可空的

LINQ永远不会改变任何源序列,它只能从中提取数据

您必须枚举提取的数据以更新原始表

List2.ForEach(item1 => 
{ 
    item1.Latest = List1.FirstOrDefault(item2 => item2.UserId == item1.UserId)?.Latest; 
});
我不知道你是怎么更新记录的。实体框架?SQL?它将是这样的:

var recordsToUpdate = List2.Join(List1,    // join List2 and List1
    list2Row => list2Row.UserId,           // from every row in List2 take UserId
    list1Row => list1Row.UserId,           // from every row in List1 take UserId
    (list2Row, list1Row) => new            // when they match make one new object
    {
        Id = list2Row.UserId,              // take UserId from list2
        Latest = list1Row.Latest,          // take Latest from list1
        Rating = list2Row.Rating,          // take Rating from list2
    })
    .ToList();                             // execute the query
LINQ永远不会改变任何源序列,它只能从中提取数据

您必须枚举提取的数据以更新原始表

List2.ForEach(item1 => 
{ 
    item1.Latest = List1.FirstOrDefault(item2 => item2.UserId == item1.UserId)?.Latest; 
});
我不知道你是怎么更新记录的。实体框架?SQL?它将是这样的:

var recordsToUpdate = List2.Join(List1,    // join List2 and List1
    list2Row => list2Row.UserId,           // from every row in List2 take UserId
    list1Row => list1Row.UserId,           // from every row in List1 take UserId
    (list2Row, list1Row) => new            // when they match make one new object
    {
        Id = list2Row.UserId,              // take UserId from list2
        Latest = list1Row.Latest,          // take Latest from list1
        Rating = list2Row.Rating,          // take Rating from list2
    })
    .ToList();                             // execute the query

到目前为止你试过什么?您为什么不通过向我们提供您的样本数据和相应的结果?并且您希望将列表2保存到数据库中?请勾选正确答案您迄今为止尝试了什么?为什么不通过将示例数据和相应的结果一起提供给我们?并且您希望将列表2保存到数据库中?请勾选正确答案