在LINQ查询中使用计算/标量值

时间:2011-08-16 10:11:01

标签: c# sql linq linq-to-sql openaccess

我在Telerik OpenAccess生成的数据模型上使用LINQ,设置搜索查询并获得结果。这一切都很好,代码看起来非常好。 但现在我需要再添加一件东西,我不知道该怎么做。 我选择的产品应该为每个客户提供不同的价格。价格取决于其他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)
});

最诚挚的问候,Tys

2 个答案:

答案 0 :(得分:1)

.Select()允许您创建动态类型,您可以使用计算出的价格扩展产品

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

或在您的初始行:

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

答案 1 :(得分:1)

在做了一些研究之后,我发现我想要做的事情不可能与Telerik OpenAccess ORM结合使用!所以我创建了一个解决方法,预先计算我需要的值,将它们放在一个表中,并将我的选择与该表的内容结合起来。 就目前而言,这是我找到的最佳解决方案。