C# LINQ包含在可为空的guid字段上
我想为'ids'数组中的每个QuestionID选择最新的DataItem记录。 因为我不能在LINQ中使用.Value,所以我已将ID转换为可空。但是现在我得到了一个“对象必须实现IConvertible” 表:数据项C# LINQ包含在可为空的guid字段上,c#,.net,mysql,linq,C#,.net,Mysql,Linq,我想为'ids'数组中的每个QuestionID选择最新的DataItem记录。 因为我不能在LINQ中使用.Value,所以我已将ID转换为可空。但是现在我得到了一个“对象必须实现IConvertible” 表:数据项 ------------------------------------ ID | Guid | DataItemTimeLocal | DateTime | QuestionID | Gu
------------------------------------
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:Yes di.QuestionID!=null将放弃,但我仍然无法使用下一部分。包含,除非ID为nullable@user1984695这确实是非常低效的,而且这不是goIt抛出错误的方式。不支持成员访问“Boolean HasValue”。我对.Value也有同样的问题earlier@user1984695看起来这是mysql Linq提供程序的问题。使用Linq到Sql都可以很好地工作。
Guid[] ids = GetAllQuestions().Select(x => x.ID).ToArray();
var latestItems = (from di in DataObjects.DataItems
where di.QuestionID.HasValue &&
ids.Contains(di.QuestionID.Value)
group di by di.QuestionID into g
select g.OrderByDescending(x => x.DataItemTimeLocal)
.FirstOrDefault()
).ToDictionary(x => x.QuestionID, y => y);