我有订单详情:
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)
答案 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();
与OrderId
和ProductId
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();