Прошу прощения за то, что не смог сформулировать название более точно.
По сути, у меня есть три объекта LINQ, связанных с таблицами. Один из них - «Продукт», другой - «Компания», а последний - таблица сопоставления, в которой хранится информация о том, какая компания продает какие продукты и по какому идентификатору эта компания ссылается на этот продукт.
Я сейчас получаю список продуктов следующим образом:
var options = new DataLoadOptions();
options.LoadWith<Product>(p => p.Mappings);
context.LoadOptions = options;
var products = (
from p in context.Products
select new {
ProductID = p.ProductID,
//BackendProductID = p.BackendProductID,
BackendProductID = (p.Mappings.Count == 0)
? "None"
: (p.Mappings.Count > 1)
? "Multiple"
: p.Mappings.First().BackendProductID,
Description = p.Description
}
).ToList();
Это делает один запрос, извлекая информацию, которую я хочу. Но я хочу иметь возможность переместить логику за BackendProductID в объект LINQ, чтобы я мог использовать закомментированную строку вместо назойливо вложенных операторов троичного оператора для аккуратности и повторного использования.
Итак, я добавил следующее свойство к объекту Product:
public string BackendProductID
{
get
{
if (Mappings.Count == 0) return "None";
if (Mappings.Count > 1) return "Multiple";
return Mappings.First().BackendProductID;
}
}
Список остается прежним, но теперь он выполняет запрос для каждого отдельного продукта, чтобы получить его BackendProductID. Код более аккуратный и многократно используемый, но производительность сейчас ужасная.
Что мне нужно, это какое-то выражение или делегат, но я не мог придумать, как написать. Это всегда заканчивалось запросом для каждого продукта, все же.
Буду признателен за любую помощь!