Использовать вычисленное / скалярное значение в запросе LINQ - PullRequest
0 голосов
/ 16 августа 2011

Я использую LINQ в модели данных, сгенерированных Telerik OpenAccess, для настройки поискового запроса и получения результатов.Все это работает очень хорошо, и код выглядит очень хорошо.Но теперь мне нужно добавить еще одну вещь, и я не уверен, как это сделать.Продукты, которые я выбираю, должны иметь разные цены для каждого покупателя.Цена зависит от некоторых других значений в 2 других таблицах SQL.Сейчас у меня есть расчет цены в скалярной функции SQL, но я не уверен, как использовать это в сочетании с моим LINQ.

Моя цель состоит в том, чтобы получить все данные за одну поездку в одну базу данных, а также выполнить сортировку по этому столбцу рассчитанной цены.

Сейчас у меня есть что-то вроде:

var products = (from p in Products select p);
if(searchOption)
   products = products.Where(product => product.Name.Contains(searchOption));
products = products.OrderByDescending(product => product.Name);
products = products.Skip(pageNr * pageSize).Take(pageSize);

Я, конечно, могу использовать все свойства своего класса Product, но я хочу иметь возможность использовать новое виртуальное / вычисляемое свойствоПозвольте сказать: Product.CalculatedPrice, а также.

У меня такое ощущение, что это должно выглядеть примерно так.

(from p in Products
select new {
    productId = p.ProductId,
    name = p.Name,
    calculatedPrice = CalculatedValueFromStoredProcedure/OrScalarFunction(p.ProductId, loggedInCustomerId)
});

С наилучшими пожеланиями, Тыс

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Проведя еще какое-то исследование, я обнаружил, что то, что я хочу сделать, невозможно в сочетании с Telerik OpenAccess ORM! Поэтому я создал обходной путь, который предварительно вычисляет нужные мне значения, помещает их в таблицу и объединяет мой выбор с содержимым этой таблицы. На данный момент это лучшее из возможных решений, которое я нашел.

1 голос
/ 16 августа 2011

.Select () позволяет создать динамический тип, в который вы можете расширить продукт по рассчитанной цене

    products.Select(i => new { Product = i, CalculatedPrice = 100})   

или в исходной строке:

    var products = (from p in Products select new { Product = p, CalculatedPrice = 100 }); 
...