У меня есть 2 таблицы данных A и B со следующей схемой.
A: Id (Example value: 881)
A: Price
A: Category
A: Type (Example value: Single/Double)
B: Applicable Ids (Example value: 123,881,341 *note that they are concatenated Ids)
B: Category
B: Price (Example value: $21)
Я пытаюсь выполнить левое соединение LINQ, чтобы заполнить A.Price значением B.Price, где A.Type«Одиночные» и B. Применимые идентификаторы содержат A.Id. Наконец, если не найден, установите значение по умолчанию 0.
Я создал класс FinalObject, поскольку из того, что я прочитал, он не может быть анонимным. Но в то же время я не уверен, как включить условие «Где содержать» и выбрать все поля из A.
List<FinalObject> Repository =
(from ARecord in A.AsEnumerable()
join BRecord in B.AsEnumerable()
on ARecord["Category"] equals BRecord["Category"] into grp
from Sgrp in grp.Where(f => f.Field<string>("Applicable Ids").ToString().Contains(ARecord["Id"].ToString())
&& (A["Type"].ToString().ToUpper() == "SINGLE")).DefaultIfEmpty()
select new FinalObject
{
.....
}).ToList();
Я должен ожидать, что количество возвращаемых записей будет похоже на A, но послевыполняя соединение LINQ, я получил меньше записей.
Пожалуйста, сообщите, если какой-либо синтаксис неправильный, и запрос не позаботился о "не найден, установите значение по умолчанию 0". еще.