Доброе утро. У меня есть список "изменений" , из которого я получаю данные из 2 таблиц данных, в результате чего "Элемент" из данных 1 равен "ItemCode" из данных 2 как показано ниже.
var changes = (from dr1 in dtItemSicorax.AsEnumerable()
from dr2 in dtItemCloud.AsEnumerable()
where dr1.Field<string>("Item") == dr2.Field<string>("ItemCode")
let sum = dtItemSicorax.AsEnumerable().Where(x => x.Field<string>("Item") == dr2.Field<string>("ItemCode")).Sum(dr => dr.Field<decimal>("Quantity"))
select new
{
ID = dr2.Field<int>("ID"),
ItemName = dr2.Field<string>("ItemName"),
ItemCode = dr2.Field<string>("ItemCode"),
Qty = dr2.Field<int>("Qty"),
UpdatedQty = dr2.Field<int>("Qty") - sum,
ItemCodeName = dr1.Field<string>("Item"),
ItemQuantity = dr2.Field<int>("Qty") - sum,
InvoiceDate = dr1.Field<DateTime>("InvoiceDate"),
Sum = sum * -1,
}).GroupBy(x => x.ItemCodeName).Select(x => x.First()).ToList();
Это работает нормально.
Сейчас я создаю еще один список, в котором я хочу получить данные из 2 таблиц данных, в соответствии с которыми «Item» из таблицы данных 1 равен , что не равно «ItemCode» из таблицы данных 2 .
Я использую следующий код:
var sicochanges = (from dr1 in dtItemSicorax.AsEnumerable()
from dr2 in dtItemCloud.AsEnumerable()
where dr1.Field<string>("Item") != dr2.Field<string>("ItemCode")
let sumzero = 0
select new
{
ID = dr2.Field<int>("ID"),
ItemName = dr1.Field<string>("Item"),
ItemCode = dr1.Field<string>("Item"),
Qty = sumzero,
UpdatedQty = sumzero - Convert.ToInt32(dr1.Field<decimal>("Quantity")),
ItemCodeName = dr1.Field<string>("Item"),
ItemQuantity = Convert.ToInt32(dr1.Field<decimal>("Quantity")),
InvoiceDate = dr1.Field<DateTime>("InvoiceDate"),
Sum = sumzero - Convert.ToInt32(dr1.Field<decimal>("Quantity")),
}).GroupBy(x => x.ItemCode).Select(x => x.First()).ToList();
Список «sicochanges» возвращает все элементы из таблиц данных вместо только тех «Item» из данных 1 , которые равны «ItemCode» из данных datatable 2 .
РЕДАКТИРОВАТЬ 1
В Datatable 1 у меня есть элемент CADMIXAUTR06850, которого нет в Datatable 2.
В Datatable 3 я пытаюсь отобразить все, что в них не распространено. Но datatable 3 отображает все элементы, как показано на рисунке.
Где я ошибаюсь в своем linq?
Любая помощь будет принята с благодарностью.