2012-05-17 40 views
0

我如何實現Linq to Entities OrderBy()的自定義IComparer等價物?如何實現Linq to Entities OrderBy()的自定義IComparer的等價功能?

不Linq的支持,以實體自定義比較爲MSDN documentation states

大多數的LINQ排序方法在LINQ支持到實體,與那些接受IComparer的異常,因爲比較器不能被翻譯成數據源。有關更多信息,請參見Standard Query Operators in LINQ to Entities Queries

+0

你需要提供有關你想要做什麼的更多信息。根據您需要自定義比較的確切原因,實施可能會有所不同。 – bdukes

+0

我需要它2例。 (1)用於web服務的算法內的查詢,以及(2)作爲填充視圖的SelectList的查詢的一部分。這足夠澄清嗎? – Jim

+0

我在比較Int64 Times(TimeSpan ticks)。 – Jim

回答

1

如果您想使用自定義IComparer,您需要先問問自己是否可以在數據庫中進行排序。如果不是,只需在序列上調用AsEnumerable,然後在服務器上對其進行排序。

如果您可以(並且想要)在數據庫中對其進行排序,那麼您需要考慮需要進行哪些轉換以便進行排序。如果你有一個複雜的轉換,你可以把它寫成一個SQL函數,並把它添加到您的數據上下文:

from e in context.Entities 
let hours = context.Get32HourValue(e.Time) 
orderby hours 
select e 
+0

Tks bdukes。我需要一個自定義比較器的原因是因爲我正在計算基於32小時制的時間,並且在比較中使'0-8'和'24-32'小時等效。如果我可以以某種方式使這個存儲操作,我會激動,但我不知道我可以,除非我寫TSQL並調用它而不是自定義比較器。 – Jim

+0

它會在SQL中創建一個函數並將其添加到您的數據庫上下文中,以生成要排序的值嗎? – bdukes

+0

我不確定你的意思。在SQL Server中創建一個函數?如果是這樣,那應該可以工作,但我更願意將代碼保留在VS Project中。如果你的意思是有一種方法可以在VStudio中編寫一個SQL函數('SQLCommand?'),那可能是一個選項。如果你的意思是其他的話,我很樂意聽到它! (感謝您的輸入!) – Jim

相關問題