【发布时间】:2017-11-17 04:36:18
【问题描述】:
所以我有以下对象:
public class user
{
// navigation properties
public DateTime lastRefresh { get; set; }
public userParent parent { get; set; }
// query data
public string id { get; set; }
public DateTime created_at { get; set; }
public int plan { get; set; }
}
所以我正在处理这些对象的两个列表,并希望获得第三个列表,它是两个集合的差异,如下所示:
List<user> freshUsers;
List<user> oldUsers;
//code populate lists
//get difference
List<user> uniqueUsers = freshUsers.Except(oldUsers).ToList();
但是,freshUsers 中的用户没有稍后手动添加的导航属性(lastRefresh 和 parent),即使有,lastRefresh 也不会匹配 oldUsers 中的相同用户。
所以我在这里需要的是一种仅根据其数据属性(id、created_at、plan)来获取列表之间差异的方法,并且想知道最好的方法。我应该创建一个自定义相等来执行它,还是有一些巧妙的方法使用 LINQ 仅比较合适的 3 个值?
【问题讨论】:
-
“freshUsers 中的用户没有导航属性”是什么意思?两个列表属于同一类型。某种类型的某些对象不可能与同一类型的其他对象不具有相同的属性,是吗?
-
另外,您编写的示例仅提供了不在旧用户中的 fresh 用户,而不是任何不在新用户中的旧用户。那是你要的吗? (你的问题陈述说你想要差异,这将包括后一组)
-
见stackoverflow.com/questions/15540891/…,尤其是一些扩展方法。
-
@RufusL 通过“freshUsers 中的用户没有导航属性”你是正确的,通过“没有”我只是说他们是空的/没有设置所以我不期望他们匹配任何东西。而且你说我没有得到真正的区别也是正确的,除了我想要的功能(获得所有新用户但确保没有重叠)。
-
@NetMage 谢谢,这是一组非常有用的答案
标签: c# list linq collections