如何在linq中获得不同的价值

aam*_*aan 1 c# linq

我使用下面的linq查询来加入一些表来获得准确的数据..

(from row in
  (from c in DbContext.Customer
   join cd in DbContext.CustomerDetails
   on c.Customer_Id equals cd.CustomerDetail_CustomerId
   join cp in DbContext.ProductPurchases
   on cd.CustomerDetail_OrgID equals cp.ProductPurchase_OrgID
   where cd.CustomerDetail_OrgId == OrganizationID --organization Id is common
   && c.Customer_Org_Id == OrganizationID
   && cp.ProductPurchase_OrgID == OrganizationID
   orderby cd.CustomerDetail_CreatedDate descending
   select new { c, cd, cp })
   select new CustomerDTO
   {
      CustomerId = row.cpd.CustomerDetail_CustomerID,
      CustomerName = row.c.Customer_LastName+", "+row.c.Customer_FirstName,
   }).ToList();
Run Code Online (Sandbox Code Playgroud)

我在CustomerDetail记录中遇到一个小问题我只想根据CustomerId从CustomerDetail获取不同的记录....

CustomerDetail可以为同一CustomerId提供多条记录

请建议我如何过滤我的查询以仅从CustomerDetail表中获取不同的记录

谢谢,

Mit*_*dir 5

您可以为CustomerDetail(s)-Objects实现一个比较器类,然后使用重载版本,它接受您的比较器.

像这样的东西:

class CustomerDetailsComparer: IEqualityComparer<CustomerDetail>
{
    public bool Equals(CustomerDetail x, CustomerDetail y)
    {

        if (Object.ReferenceEquals(x, y)) return true;

        if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            return false;

        return x.CustomerId == y.CustomerId;
    }


    public int GetHashCode(CustomerDetail cd)  
    {
         // Do something here
    }  
}


// ...

DbContext.CustomerDetails.Distinct(new CustomerDetailsComparer());
Run Code Online (Sandbox Code Playgroud)