2012-04-15 46 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

相关问题