gpt4 book ai didi

c# - 识别一个列表中不在另一个不同类型列表中的项目

转载 作者:太空狗 更新时间:2023-10-30 01:21:03 24 4
gpt4 key购买 nike

我需要从一个列表中识别出另一个列表中不存在的项目。这两个列表属于不同的实体(ToDoWorkshopItem)。如果 Name 在任何待办事项列表项中匹配,我认为一个研讨会项目在待办事项列表中。

以下是我所追求的,但每次我重新访问它时都发现它很尴尬且难以理解。我使用 NHibernate QueryOver 语法获取这两个列表,然后使用 LINQ 语句筛选出满足要求的 Workshop 项目(DateDue 在接下来的两周内并且名称 不在待办事项列表中。

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 列表。

最佳答案

认为我已经设法将@CSL 提出的答案的 Linq 版本放在一起,并将其标记为已接受的答案,因为它使我朝着以下方向发展。

var twoWeeksTime = DateTime.Now.AddDays(14);
var subquery = NHibernate.Criterion.QueryOver.Of<ToDo>().Select(t => t.TaskName);
var matchingItems = Session.QueryOver<WorkshopItem>()
.Where(w => w.DateDue <= twoWeeksTime &&
w.IsWorkshopItemInProgress == true)
.WithSubquery.WhereProperty(x => x.Name).NotIn(subquery)
.Future<WorkshopItem>();

它返回我期望的结果并且不依赖于魔法字符串。我很犹豫,因为我不完全理解 WithSubquery(以及内联它是否是一件好事)。好像等同于

WHERE WorkshopItem.Name IS NOT IN (subquery)

此外,我不理解 Future 而不是 List。如果有人愿意阐明那些有帮助的内容。

关于c# - 识别一个列表中不在另一个不同类型列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16941914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com