我需要从一个列表中识别出另一个列表中不存在的项目。这两个列表属于不同的实体 (ToDo
和WorkshopItem
)。Name
如果在任何待办事项列表项目中匹配,我认为研讨会项目在待办事项列表中。
以下是我所追求的,但每次我重新访问它时都会感到尴尬和难以理解。我使用 NHibernateQueryOver
语法来获取两个列表,然后使用 LINQ 语句过滤到仅满足要求的 Workshop 项目(DateDue
在接下来的两周内,并且Name
不在 ToDo 项目列表中。
var allTodos = Session.QueryOver<ToDo>().List();
var twoWeeksTime = DateTime.Now.AddDays(14);
var workshopItemsDueSoon = Session.QueryOver<WorkshopItem>()
.Where(w => w.DateDue <= twoWeeksTime).List();
var matches = from wsi in workshopItemsDueSoon
where !(from todo in allTodos
select todo.TaskName)
.Contains(wsi.Name)
select wsi;
理想情况下,我希望只有一个 NHibernate 查询返回WorkshopItem
符合我要求的 s 列表。