Вставьте значения в столбец 1 списка 1 из столбца 2 списка 2 на основе общего столбца - PullRequest
1 голос
/ 25 февраля 2020

Список 1:

|      User Id        |    Latest        |
+---------------------+------------------+
|          1          |         1        |
|          2          |         3        |
|          3          |         3        |
|          4          |         0        |

Список 2:

|      User Id        |    Latest        |        Rating    |
+---------------------+------------------+------------------+
|          1          |       null       |       10         |
|          2          |       null       |       12         |
|          3          |       null       |       11         |
|          4          |       null       |       16         |

Я хочу вставить значения столбца Latest List1 в столбец Latest List2 на основе объединения / сравнения значений столбца User Id в обоих списках.

Я могу использовать foreach l oop, но это будет n * m, я думаю, и выглядит ужасно. Есть ли способ сделать это с помощью LINQ или эффективно?

С уважением. Junaid

Ответы [ 4 ]

2 голосов
/ 25 февраля 2020

LINQ никогда не изменит ни одну из исходных последовательностей, он может только извлечь из нее данные.

Вам придется перечислять извлеченные данные, чтобы обновить исходные таблицы.

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

Я не знаю, как вы обновляете свои записи. Сущность рамки? SQL? это будет примерно так:

foreach (var recordToUpdate in recordsToUpdate)
{
     UpdateRecord(recordToUpdate.UserId, recordToUpdate.Latest, recordToUpdate.Rating)
     // TODO: implement this function
}
2 голосов
/ 25 февраля 2020

вы можете сделать это с помощью LINQ:

Попробуйте этот код:

List2.ForEach(item1 => 
{ 
    item1.Latest = List1.FirstOrDefault(item2 => item2.UserId == item1.UserId)?.Latest; 
});

Обратите внимание, что Latest должно быть Nullable.

2 голосов
/ 25 февраля 2020
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 голос
/ 25 февраля 2020

Попробуйте что-нибудь подобное. это может решить вашу проблему с добавлением последнего значения из списка 1 в список 2.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...