繁体   English   中英

LINQ查询列表ID

[英]linq query on list id's

我有一个ID列表,我需要获取与列表中每个ID对应的所有记录。

下面是示例代码

public List<Items> LoadLineItemByPkeys(IEnumerable<long> ItemId)
{
    var ItemList = CurrentSession.Query<LineItem>()
      .Where(l =>itemId.Contains(l.id))
      .ToList();
    return ItemList ;
}

但我越来越例外

NHibernate.dll中发生类型为'NHibernate.Exceptions.GenericADOException'的异常,但未在用户代码中处理

内部异常:

无法将参数值从WhereSelectArrayIterator`2转换为Int64。 请帮我。

当我在LINQPad中执行相同的查询时,我得到的结果。

您可能由于传递ID的方式而遇到麻烦。 您可能会发现将该序列转换为列表或数组会有所帮助:

// Various names to be more conventional/readable
public List<Items> LoadLineItemsById(IEnumerable<long> ids)
{
    var idList = ids.ToList();
    return CurrentSession.Query<LineItem>()
                         .Where(item => idList.Contains(item.Id))
                         .ToList();
}

如果我没有误会,您将无法使用contains方法。

您必须使用.IsIn()

public List<Items> LoadLineItemByPkeys(IEnumerable<long> itemIds)
{
    var lineItemList = CurrentSession.QueryOver<LineItem>()
      .WhereRestrictionOn(l =>l.id).IsIn(itemIds).List()
      .ToList();
    return lineItemList ;
}

这将生成带有in运算符的sql语句。 请注意此运算符的局限性。 某些数据库的参数限制为1000,其他参数的限制为2000等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM