如何根据OrderDetails </orderdetails>中的一个值区分List <orderdetails>

时间:2014-01-31 11:15:00

标签: c# .net linq

我有订单详情:

public class OrderDetails
    {
        public int OrderId { get; set; }
       // [DataMember]
        public int ProductId { get; set; }
    }

现在如果我在下面做了类似的事情,它会返回所有内容:

List<OrderDetails> orderDetails = new List<OrderDetails>();
---------------------------------
return orderDetails.Distinct();

但如果我的确如此:

  List<OrderDetails> orderDetails = new List<OrderDetails>();
    ---------------------------------
return orderDetails.Select(x => x.OrderId).Distinct();

然后我只得到订单ID。

如何根据OrderId获取Distinct Orderdetails(OrderID和ProductId)

5 个答案:

答案 0 :(得分:1)

您可以使用以IEqualityComparer<TSource>作为比较器的Distinct重载。

您可以将其定义为:

public class OrderDetailsEqualityComparer : IEqualityComparer<OrderDetails>
{
    public bool Equals(OrderDetails x, OrderDetails y)
    {
        if (object.ReferenceEquals(x, y))
        {
            return true;
        }

        if (object.ReferenceEquals(x, null) || object.ReferenceEquals(y, null))
        {
            return false;
        }

        return (x.OrderId == y.OrderId );
    }

    public int GetHashCode(Product obj)
    {
        return obj.OrderId.GetHashCode();
    }
}

并将其用作:

var osrderedOrderDetails =
       orderDetails.Distinct(new OrderDetailsEqualityComparer());

答案 1 :(得分:0)

尝试以下代码:

OrderId

不同
return orderDetails.GroupBy(x => x.OrderId).Select(g => g.First()).ToList();

OrderIdProductId

不同
return orderDetails.GroupBy(x => new {x.OrderId, x.ProductId}).Select(g => g.First()).ToList();

答案 2 :(得分:0)

您可以创建一个采用Order Id的方法,并按以下方式返回列表...

public List<OrderDetails> GetDistinctOrderDetails(int orderId)
{
  List<OrderDetails> orderDetails = GetAllOrders();
  return orderDetails.Where(x => x.OrderId == orderId).Distinct();
}

答案 3 :(得分:0)

return orderdetails.Where(a=>a.OrderID == _inputvalue).ToArray();

“toarray”可以是您需要的任何集合类型 除非你的函数返回Ienumerable&lt;&gt;然后你不需要它

使用distinct()不是一个好主意,因为它会删除行

答案 4 :(得分:0)

实现IEquatable接口:

public class OrderDetails : IEquatable<OrderDetails>
{
    public int OrderId { get; set; }

    public int ProductId { get; set; }

    public bool Equals(OrderDetails anotherOrder)
    {
        return this.OrderId.Equals(anotherOrder.OrderId);
    }

    public override int GetHashCode()
    {
        return this.OrderId;
    }
}

现在,尝试orderDetails.Distinct();