我创建了3个不同的列表变量,其中包含用于添加,删除和更新的数据。我必须将ExistingItems
与NewItemList
的数据进行比较,然后如果ExistingItems
有数据但NewItemList
没有数据,则该项目应列在deleteList
变量中。像这样,如果NewItemList
有数据但ExistingItems
没有数据,则该项目应列在addList
中。最后,当ExistingItems
NewItemList
匹配时,它将添加到updateList
中。请注意,ID对于比较匹配是唯一的,并且ExistingItems
和NewItemList
两种数据模型类型都与Item
类完全相同。我已经尝试使用Except()方法过滤addList
,但这对我不起作用,因为我只想按ID而不是Price进行比较。
主要代码:
var addList = new List<Item>();
var updateList = new List<Item>();
var deleteList = new List<Item>();
addList = EixistingItems.Except(NewItemList).ToList();
物品类别:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestProj.Models
{
Class Item
{
public int ID { get; set; }
public int Price { get; set; }
}
}
答案 0 :(得分:3)
我认为您需要的是一个相等比较器。它允许在Except
linq语句中控制比较。然后,您可以定义仅检查ID
属性:
var deleteList = ExistingItems.Except(NewItemList, new ItemComparer()).ToList();
var addList = NewItemList.Except(ExistingItems, new ItemComparer()).ToList();
class Item
{
public int ID { get; set; }
public int Price { get; set; }
}
class ItemComparer : IEqualityComparer<Item>
{
public bool Equals(Item x, Item y)
{
return x.ID == y.ID;
}
public int GetHashCode(Item obj)
{
return obj.GetHashCode();
}
}
答案 1 :(得分:1)
已更新
感谢弗雷加(Freggar)指出我的错误。
如果要在两个相同类型的对象之间进行比较,例如在OP问题中所述,则Except
更可取。 plori已经提供了正确的答案,所以我不再赘述,应该选择他的答案。
例如,Where
与Any
一起使用的唯一情况是
Class Item_1
{
public int ID { get; set; }
public int Price { get; set; }
}
Class Item_2
{
public int ID { get; set; }
public int Price { get; set; }
public int remark { get; set; }
}
由于Except
使用hashset
保存要比较的项目,在这种情况下无法再使用Except
,依此类推,将Where
与{{ 1}}。
原始答案
尝试
Any