我正在努力让FiscalYear.id
中IList<int> years
的所有@events获得。我正在使用any()
,但它抛出以下stacktrace错误:
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 => !@event.IsDeleted &&
@event.EventType.Id == eventTypeId &&
years.Any(y => y == @event.FiscalYear.Id))
}
答案 0 :(得分:1)
看起来您正试图在QueryOver
中使用Linq方法。这不受支持。请尝试使用Linq提供程序:
FindAllPaged(int eventTypeId, IList<int> aors, IList<int> years)
{
IList<Domain.Event> results =
session.Query<Event>()
.Where(@event => !@event.IsDeleted &&
@event.EventType.Id == eventTypeId &&
years.Any(y => y == @event.FiscalYear.Id))
}
答案 1 :(得分:1)
我也遇到了同样的异常消息
无法识别的方法调用: System.Linq.Enumerable:Boolean任何[TSource](System.Collections.Generic.IEnumerable
1[TSource], System.Func
2 [TSource,System.Boolean])
将IqueryOver与Contains方法
一起使用时 Ex:
var departmentTypesArray = criteria.DepartmentTypes.ToArray();
qover = qover.Where(p => departmentTypesArray.Contains(p.DepartmentType));
当我检查数据库时,我在查询表中没有任何记录。
当我使用限制更改我的查询时,它适用于我
qover = qover.WhereRestrictionOn(p => .DepartmentType).IsIn(departmentTypesArray);
答案 2 :(得分:0)
请尝试使用Contains
方法:
IList<Domain.Event> results = session
.QueryOver<Event>()
.Where(e => !@event.IsDeleted &&
@event.EventType.Id == eventTypeId &&
years.Contains(@event.FiscalYear.Id))
.ToList();
或者使用IsIn
IList<Domain.Event> results = session
.QueryOver<Event>()
.Where(e => !@event.IsDeleted && @event.EventType.Id == eventTypeId)
.And(Restrictions.On<Event>(@event => @event.FiscalYear.Id)
.IsIn(years.ToArray()))
.ToList();
答案 3 :(得分:-1)
你可以试试这个:
IList<Domain.Event> results = session.QueryOver<Event>().ToList().FindAll(e => !e.IsDeleted && e.Id.Equals(eventTypeId) && years.Contains(e.FiscalYear.Id))