【问题标题】:linq to entities distinct methodlinq 到实体不同的方法
【发布时间】:2012-04-26 23:21:08
【问题描述】:

我有一张名为 CateringPurchaseOrder 的桌子。该表包含一个名为“PONO”的列。该列不止一次包含相同的值。我想根据“pono”列中的唯一值检索记录。

例子:

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.

你有解决这个问题的办法吗?

【问题讨论】:

    标签: linq-to-entities


    【解决方案1】:

    Linq to entity 无法将您的 CateringPorderComparer 解析为 SQL。

    如果没有问题,您可以在 C# 代码中执行 Distinct 操作,而不是让数据库执行此操作。根据有多少行和有多少重复项,这对您来说可能不是问题。

    要在数据库查询之后执行 Distinct,请在执行 distinct 之前将其转换为 Eumerable:

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

    【讨论】:

    • 嗨,感谢当我将此查询的结果绑定到 gridview 时,我收到“数据源不支持服务器端数据分页”的错误。你对这个问题有什么想法吗?
    • AsEnumerable() 调用是修复我的错误的魔法。有一个像 Where() 那样带函数的重载会很好,但我会尽我所能。
    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多