【发布时间】:2023-03-31 07:19:02
【问题描述】:
我想为 'ids' 数组中的每个 QuestionID 选择最新的 DataItem 记录。 因为我不能在 LINQ 中使用 .Value,所以我将 id 转换为 Nullable。但是我现在得到一个 'Object must implement IConvertible'
表:数据项
------------------------------------
ID | Guid |
DataItemTimeLocal | DateTime |
QuestionID | Guid? |
------------------------------------
Guid?[] ids = GetAllQuestions().Select(x => (Guid?)x.ID).ToArray();
var latestItems = (from di in DataObjects.DataItems
where di.QuestionID != null && ids.Contains(di.QuestionID)
group di by di.QuestionID into g
select g.OrderByDescending(x => x.DataItemTimeLocal).FirstOrDefault()
).ToDictionary(x => x.QuestionID, y => y);
【问题讨论】:
-
你需要重新设计你的查询,这样你就不需要在里面调用 Contains()
-
为什么
ids需要是可为空的 guid?只需创建一个 Guid 数组并忽略空值,您的查询条件 (di.QuestionID != null) 无论如何都会丢弃它们。 -
@Adi:我已经通过遍历 id 并针对每个问题 id 进行查询来做到这一点,这是低效的,我正在寻找一种更好的方法,也许只需要一个查询。
-
@paul:是的 di.QuestionID != null 会丢弃,但我仍然不能使用下一部分。除非 id 可以为空
-
@user1984695 这确实是非常低效的,这不是要走的路