SQL IN statement in Linq for NHibernate
我有这个查找来按符号对 ResultId 进行分组。
我在下面有 Linq 查询,但我不能使用 Contain() 来创建 SQL IN 语句,这是这篇文章 http://blog.wekeroad.com/2008/02/27/creating-in-queries-with-linq-to 的状态-sql
1 2 3 4 5 6 7 8 9 | // This will group ResultIds (Guid) by their symbol (string). var asd = ResultIdsAndSymbols.ToLookup(x => x.Symbol, y => y.ResultID); foreach (var qwe in asd) { var Numbers = (from t in Session.Query<TableName>() where qwe.Contains(t.ResultID) select t.Number).ToList(); } |
更新:
重试此代码并深入分析错误(System.InvalidCastException:对象必须实现 IConvertible)后,我收到了这条信息性错误消息:"无法将参数值从分组转换为 Guid"。
1 | where qwe.ToList().Contains(t.ResultID) |
更新:
报告的问题:https://nhibernate.jira.com/browse/NH-2762
NHibernate LINQ 提供程序在涉及 IN 子句时受到限制。它似乎只适用于 T 是简单类型的集合,例如
这适用于 NHibernate 3.1(未在早期版本中测试):
1 2 3 4 5 6 7 8 9 | var asd = ResultIdsAndSymbols.ToLookup(x => x.Symbol, y => y.ResultID); foreach (var qwe in asd) { List<int> list = qwe.ToList(); var Numbers = (from t in Session.Query<TableName>() where list.Contains(t.ResultID) select t.Number).ToList(); } |