C# LINQ包含在可为空的guid字段上

C# LINQ包含在可为空的guid字段上,c#,.net,mysql,linq,C#,.net,Mysql,Linq,我想为'ids'数组中的每个QuestionID选择最新的DataItem记录。 因为我不能在LINQ中使用.Value,所以我已将ID转换为可空。但是现在我得到了一个“对象必须实现IConvertible” 表:数据项 ------------------------------------ ID | Guid | DataItemTimeLocal | DateTime | QuestionID | Gu

我想为'ids'数组中的每个QuestionID选择最新的DataItem记录。 因为我不能在LINQ中使用.Value,所以我已将ID转换为可空。但是现在我得到了一个“对象必须实现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: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);