2012-04-15 90 views
-1

我有一個名爲CateringPurchaseOrder的表。該表包含名稱爲「PONO」的一列。該列多次包含相同的vlaue。我想根據「pono」列中的唯一值檢索記錄。linq實體不同的方法

實施例:

pono column1 
1  value1 
1  value2 
2  value3 
2  value4 

輸出:

pono coulm1 
1   value1 
2   value3 

我試圖用下面的代碼:

IEnumerable<CateringPurchaseOrder> order = entites.CateringPurchaseOrders.Distinct<CateringPurchaseOrder>(new CateringPorderComparer()); 

public class CateringPorderComparer : IEqualityComparer<CateringPurchaseOrder> 
{ 
    bool IEqualityComparer<CateringPurchaseOrder>.Equals(CateringPurchaseOrder p1, CateringPurchaseOrder p2) 
    { 
     return p1.P_O_No == p2.P_O_No; 
    } 

    int IEqualityComparer<CateringPurchaseOrder>.GetHashCode(CateringPurchaseOrder obj) 
    { 
     return obj.P_O_No.GetHashCode(); 
    } 
} 

我得到了以下錯誤:

LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[MilitarymessModel.CateringPurchaseOrder] Distinct[CateringPurchaseOrder](System.Linq.IQueryable`1[MilitarymessModel.CateringPurchaseOrder], System.Collections.Generic.IEqualityComparer`1[MilitarymessModel.CateringPurchaseOrder])' method, and this method cannot be translated into a store expression. 

你有解決這個問題的辦法嗎?

回答

4

Linq to entities無法將CateringPorderComparer解析爲SQL。

如果這不是問題,您可以在C#代碼中執行Distinct操作,而不是讓數據庫執行此操作。取決於有多少行和多少重複,這對你來說可能不是問題。

要做到明晰,對數據庫查詢後,將其轉換爲Eumerable你做不同的面前:

entites.CateringPurchaseOrders.AsEnumerable().Distinct<CateringPurchaseOrder>(
new CateringPorderComparer()); 
+0

您好,感謝在我這個查詢到GridView的結果,結合我得到的錯誤「數據源不支持服務器端數據分頁「。你對這個問題有什麼想法。 – 2012-04-16 03:22:00

+0

檢查此:http://stackoverflow.com/questions/1661292/the-data-source-does-not-support-server-side-data-paging – 2012-04-16 08:35:38

+0

AsEnumerable()調用是修復我的錯誤的魔力。本來很高興有一個重載函數,像Where()那樣,但我會拿我能得到的。 – Suncat2000 2012-08-23 19:52:16