簡體   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