2012-04-15 19 views
-1

Ich habe eine Tabelle mit dem Namen CateringPurchaseOrder. Diese Tabelle enthält eine Spalte mit dem Namen "PONO". Diese Spalte enthält denselben Wert mehr als einmal. Ich möchte den Datensatz basierend auf dem eindeutigen Wert in der Spalte "pono" abrufen.linq to Entities distinct Methode

Beispiel:

pono column1 
1  value1 
1  value2 
2  value3 
2  value4 

Ausgang:

pono coulm1 
1   value1 
2   value3 

ich mit folgendem Code versucht haben:

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(); 
    } 
} 

Ich habe folgende Fehlermeldung:

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. 

Haben Sie eine Lösung für dieses Problem?

Antwort

4

Linq to Entities ist nicht in der Lage, Ihren CateringPorderComparer in SQL zu parsen.

Wenn es kein Problem ist, können Sie die Distinct-Operation in Ihrem C# -Code durchführen, anstatt die Datenbank dazu zu veranlassen. Abhängig davon, wie viele Zeilen und wie viele Duplikate es gibt, ist dies für Sie kein Problem.

Um die Distinct nach der Datenbankabfrage zu tun, wandelt es in ein Eumerable, bevor Sie den deutlichen tun:

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

hallo, danke, wenn ich das Ergebnis dieser Abfrage an die Gridview binden bekam ich den Fehler " Die Datenquelle unterstützt das serverseitige Datenpaging nicht ". Hast du eine Ahnung von diesem Problem? –

+0

überprüfen Sie dies: http://StackOverflow.com/Questions/1661292/The-Data-Source-does-Not-Support-Server-Side-DataPaging –

+0

Der Aufruf von AsEnumerable() war die Magie, die meinen Fehler behoben. Wäre nett gewesen, eine Überladung zu haben, die eine Funktion hat, wie Where(), aber ich nehme, was ich bekommen kann. – Suncat2000

Verwandte Themen