【发布时间】:2011-05-27 00:54:10
【问题描述】:
我有这个查找来按符号对 ResultId 进行分组。 我在下面有 Linq 查询,但我不能使用 Contain() 来创建 SQL IN 语句,这是这篇文章 http://blog.wekeroad.com/2008/02/27/creating-in-queries-with-linq-to-sql 的状态@
// 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: Object must implement IConvertible)后,我收到了这条信息性错误消息:“无法将参数值从 Grouping 转换为 Guid” . qwe 是 IGrouping<string, Guid> 的一种类型,它将变为 IEnumerable<Guid>,这应该不是问题,就像我们将其传递给 List 构造函数或在 foreach 语句中使用一样。 System.Data.SqlClient 中抛出的异常。我认为 NHibernate 只是将 Grouping<TKey, TElement> 传递给导致错误的 sql 参数。 NHibernate 应该被设计为枚举到任何 IEnumerable<T> 并生成 SQL IN 查询,就像它为 List<T> 所做的那样。
List<T>、Array[]、Stack 运行良好。所以我把代码改成这样:
where qwe.ToList().Contains(t.ResultID)
【问题讨论】:
-
您提供的问题报告链接失效。
-
他们可能会迁移到 Jira 云。我更新了链接,但它不是一个流行的错误,他们只是把未解决的。但是@Aaronaught 说它在下面的 v3.2 上已修复。
-
链接现在可以正常工作了
标签: linq nhibernate