我有两个相同对象的列表,它们的大小不同。
我不会在List2中的所有对象中,其中tmDate在List2中不存在。
public class MyObj
{
public MyObj(DateTime tmDate)
{
this.tmDate = tmDate;
}
public DateTime tmDate { get; set; }
}
var List1 = new List<MyObj>();
var List2 = new List<MyObj>();
List1.Add(new MyObj(new DateTime(2015, 01, 01)));
List1.Add(new MyObj(new DateTime(2015, 01, 02)));
List1.Add(new MyObj(new DateTime(2015, 01, 03)));
List2.Add(new MyObj(new DateTime(2015, 01, 01)));
List2.Add(new MyObj(new DateTime(2015, 01, 02)));
var notMatchingObj =
List1.Where(
l1 => List2.Any(l2 => l2.tmDate != l1.tmDate));
这段代码给了我错误的输出..我只想在这种情况下使用tmDate 2015-01-03 MyObj
答案 0 :(得分:3)
你可以尝试这个:
var result = list1.Where(item=>!list2.Any(item2=>item2.tmDate==item.tmDate));
如果list2.Any(item2=>item2.tmDate==item.tmDate)
中的任何项目与list2
具有相同的日期,则此item
会返回true。否则返回false。把它当作否定,我们得到了我们想要的。
另一方面,List2.Any(l2 => l2.tmDate != l1.tmDate)
如果在List2
中找到任何项目,其日期与l1
的日期不同,则返回true。这并不意味着不存在与l1
具有相同日期的对象。如果您检查的第一个项目的日期与l1
不同,则上述内容将返回true。但是,List2
中的某个项目可能与l1
具有相同的日期。
答案 1 :(得分:-1)
尝试
var notMatchingObj =
from list1 in List1
where (!List2.Any(l2 => l2.tmDate == list1.tmDate))
select new { list1.tmDate };