2011-08-16 46 views
0

我在Telerik OpenAccess生成的數據模型上使用LINQ來設置搜索查詢並獲取結果。這一切都很好,代碼看起來非常好。 但現在我需要添加一件事,我不知道如何。 我選擇的產品應該爲每個客戶有不同的價格。價格取決於其他兩個SQL表中的其他值。現在我在SQL標量函數中計算價格,但是我不確定如何將它與我的LINQ結合使用。在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.CalculatedPrice。

我有一種感覺,它應該看起來有點像這樣。

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

最好的問候,TYS

+0

也許我錯過了這一點,但不會這樣做:'product => product.Name.Contains(searchOption)&& product.CalculatedPrice <100' –

+0

這樣做,但問題是,CalculatedPrice還沒有。這就是我的問題所在,如何在相同的linq查詢中獲得/選擇計算出的價格? – Tys

+0

你想要做什麼計算?如果它是簡單的加法/乘法,那麼你應該能夠將它添加到Linq表達式中。 – Narnian

回答

1

在做了一些更多的研究之後,我發現了我想要的Do不可能與Telerik OpenAccess ORM一起使用!所以我創建了一個解決方案,預先計算出我需要的值,將它們放在一個表中,並將我的選擇與該表的內容結合起來。 現在,這是我找到的最佳解決方案。

1

.Select()允許你創建一個動態的類型,您可以在其中與計算出的價格

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

或在您的初始行延長產品:

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

這是走向正確的方向,但現在我不想要100的固定價格,但我需要從數據庫中檢索該值。使用存儲過程或函數。那可能嗎? – Tys

+0

您可以將sp添加到Linq to SQL編輯器,只需將sp拖放到dbml文件即可。然後,您將能夠使用Select中的DataContext中的Sp – AntonR