[英]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.