이의 번호가있는 경우이 쿼리에 제한이 될 수 Howeever "키는"1000 개 이상의 (넣다 다른 DBS와 확실하지 오라클의)를 초과 그래서 내가 대신 CreateQuery- 네이티브 SQL을의 ICriteria를 사용하는 것이 좋습니다 .
는
[TestFixture]
public class ThousandIdsNHibernateQuery
{
[Test]
public void TestThousandIdsNHibernateQuery()
{
//Keys contains 1000 ids not included here.
var keys = new List<decimal>();
using (ISession session = new Session())
{
var tableCirt = session.CreateCriteria(typeof(TableA));
if (keys.Count > 1000)
{
var listsList = new List<List<decimal>>();
//Get first 1000.
var first1000List = keys.GetRange(0, 1000);
//Split next keys into 1000 chuncks.
for (int i = 1000; i < keys.Count; i++)
{
if ((i + 1)%1000 == 0)
{
var newList = new List<decimal>();
newList.AddRange(keys.GetRange(i - 999, 1000));
listsList.Add(newList);
}
}
ICriterion firstExp = Expression.In("Key", first1000List);
ICriterion postExp = null;
foreach (var list in listsList)
{
postExp = Expression.In("Key", list);
tableCirt.Add(Expression.Or(firstExp, postExp));
firstExp = postExp;
}
tableCirt.Add(postExp);
}
else
{
tableCirt.Add(Expression.In("key", keys));
}
var results = tableCirt.List<TableA>();
}
}
}
@binaryhowl을 같은 것을 할 - 그것은 IList의 날을 다시주고 내가 아닌 목록 그렇게 할 때. – chobo2
@binaryhowl - 목록에 캐스트 (목록) 가야할지 모르겠지만 실행할 때이 오류가 발생합니다. 'Antlr.Runtime.NoViableAltException'유형의 예외가 발생했습니다. 1 행 7 열 근처 –
chobo2
구체 목록을 원하면 result.ToList()를 반환하십시오. 가장 좋은 방법은 IEnumerable 또는 적어도 IList를 반환하는 메서드를 변경하는 것이지만 –
rebelliard