我正在尝试从绑定到gridview的列表中删除重复项。然而,无论我做什么,副本仍然存在。
添加变量lol用于测试Distinct,但它不起作用。 目前的代码:
GWportalDataContext db = new GWportalDataContext();
DeliveryTimeRepository dltRep = new DeliveryTimeRepository();
var query = from o in db.Orders
join y in db.OrderLines on o.OrderID equals y.OrderID
join x in db.Products on y.ItemNumber equals x.ItemNumber
where o.AccountNumber == AppSession.CurrentLoginTicket.AccountNumber
select new
{
o.OrderID,
o.AxaptaSalesId,
y.ItemNumber,
x.Name,
x.ProductFormatName,
y.Quantity,
y.Price,
Status = dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).Substring(0, dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).LastIndexOf("|")),
Levering = dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).Substring(dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).LastIndexOf("|")).Replace("|", "")
};
var query2 = from o in db.AxSales
join y in db.AxSaleLines on o.SalesId equals y.SalesId
join x in db.Products on y.ItemNumber equals x.ItemNumber
where o.AccountNumber == AppSession.CurrentLoginTicket.AccountNumber
select new
{
OrderID = o.SalesId,
AxaptaSalesId = o.SalesId,
y.ItemNumber,
x.Name,
x.ProductFormatName,
y.Quantity,
Price = y.SalesPrice,
Status = dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).Substring(0, dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).LastIndexOf("|")),
Levering = dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).Substring(dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).LastIndexOf("|")).Replace("|", "")
};
//Query 1 start
var dataToList = query.ToList();
List<object> deletedItems = dataToList.Where(item => orderDeleted(item.OrderID, item.AxaptaSalesId)).Cast<object>().ToList();
var datatoGrid = dataToList.Except(deletedItems);
// Query 1 end
//Query 2 start
var dataToList2 = query2.ToList();
List<object> deletedItems2 = dataToList2.Where(item => axOrderDeleted(item.AxaptaSalesId)).Cast<object>().ToList();
var dataToGrid2 = dataToList2.Except(deletedItems2);
//Query 2 end
var combined = datatoGrid.Union(dataToGrid2);
var lol = combined.Distinct();
e.Result = lol;
答案 0 :(得分:2)
你需要告诉区别要过滤的内容,使用IEqualityComparer
它无法确定当前不同的内容。
答案 1 :(得分:1)
我发现您使用.Cast<>()
扩展方法将结果项目转换为object
,这表明您在协调两个匿名类型时遇到问题。假设query1
和query2
的结果是具有相同属性名称和类型的匿名类型,则不应该是这种情况。
匿名类型提供了重写的Equals()
和GetHashCode()
方法,这些方法是根据属性的Equals()
和GetHashCode()
实现定义的。因此,.Distinct()
运算符应该适用于两个相同类型的匿名类型对象,而不需要IEqualityComparer实现。
尝试从查询中删除.Cast<object>()
扩展方法。如果两个查询具有相同的数据类型,则仅允许您随后执行的.Union()
操作。如果是这种情况,您的.Distinct()
方法应该可以正常工作。
希望这有帮助。