2013-08-08 2 views
2

FiscalYear.idIList<int> years에있는 모든 @events를 얻으려고한다. 나는 any()를 사용하고 있지만, 다음과 같은 스택 추적 오류 던지고있다 :Any를 사용하여 NHibernate의리스트를 체크한다

Unrecognised method call: 
System.Linq.Enumerable:Boolean Any[TSource](System.Collections.Generic.IEnumerable`1[TSource], System.Func`2[TSource,System.Boolean]) 

어떤 아이디어를? 여기 코드는 다음과 같습니다

FindAllPaged(int eventTypeId, IList<int> aors, IList<int> years) 
{ 

IList<Domain.Event> results = 
    session.QueryOver<Event>() 
     .Where(@event => [email protected] && 
     @event.EventType.Id == eventTypeId && 
     years.Any(y => y == @event.FiscalYear.Id)) 
} 

답변

0

대신 Contains 방법을 사용해보십시오 :

IList<Domain.Event> results = session 
    .QueryOver<Event>() 
    .Where(e => [email protected] && 
     @event.EventType.Id == eventTypeId && 
     years.Contains(@event.FiscalYear.Id)) 
    .ToList(); 

을 아니면 제한을 IsIn를 사용하여 먼 길 구축 :

IList<Domain.Event> results = session 
    .QueryOver<Event>() 
    .Where(e => [email protected] && @event.EventType.Id == eventTypeId) 
    .And(Restrictions.On<Event>(@event => @event.FiscalYear.Id) 
        .IsIn(years.ToArray())) 
    .ToList(); 
+0

가 사용

은, 그것은 – Mike

+0

지금이 오류를 가지고 같은 오류가 발생합니다 포함 작동 .IsIn (System.Collections.ICollection) '에 잘못된 인수가 있습니다. \t' – Mike

+0

@Mike 오랫동안'List '는'ICollection'을 구현했지만 IList 는 구현하지 않는다는 것을 깨닫기까지 당황했습니다. 'years' 매개 변수를'List '또는'int []'로 변경하거나 단순히'years.ToList()'또는'years.ToArray() '를 호출하면 작동 할 것입니다. –

-1

당신이 시도 할 수 :

IList<Domain.Event> results = session.QueryOver<Event>().ToList().FindAll(e => !e.IsDeleted && e.Id.Equals(eventTypeId) && years.Contains(e.FiscalYear.Id)) 
+1

데이터베이스에서 모든 레코드를 가져옵니다. 이것은 나쁜 습관이다 .. –

1

QueryOver에서 Linq 방법을 사용하려는 것 같습니다. 지원되지 않습니다. 대신의 LINQ 공급자를 사용하십시오 :와 IqueryOver 사용하는 경우

FindAllPaged(int eventTypeId, IList<int> aors, IList<int> years) 
{ 

IList<Domain.Event> results = 
    session.Query<Event>() 
     .Where(@event => [email protected] && 
     @event.EventType.Id == eventTypeId && 
     years.Any(y => y == @event.FiscalYear.Id)) 
} 
1

내가 같은 예외 메시지

Unrecognised method call: System.Linq.Enumerable:Boolean Any[TSource](System.Collections.Generic.IEnumerable 1[TSource], System.Func 2[TSource,System.Boolean])

가 발생 포함 방법 난 데이터베이스를 검사 할 때

Ex: 
var departmentTypesArray = criteria.DepartmentTypes.ToArray(); 
qover = qover.Where(p => departmentTypesArray.Contains(p.DepartmentType)); 

, 내가 돈 ' 내가 쿼리를 만들고있는 테이블 내부의 레코드가 없습니다. `NHibernate.Criterion.Lambda.LambdaRestrictionBuilder '에 가장 적합한 오버로드 된 메서드 : 내가 제한 내 쿼리를 변경할 때 나

qover = qover.WhereRestrictionOn(p => .DepartmentType).IsIn(departmentTypesArray);