Каждый Item
имеет свойство Assigned
, которое имеет тип ICollection
.
Если вы посмотрите на определение Queryable.Any , вы найдете:
public static bool Any<TSource> (this IQueryable<TSource> source,
Expression<Func<TSource,bool>> predicate);
Поэтому свойство Assigned
должно реализовывать ICollection<TSource>
, где TSource - это фактический тип, который вы ожидаете найти в своей коллекции.
Правильным решением будет изменение типа свойства Assigned
, так что вы знаете, что коллекция содержит только элементы ожидаемого вами типа.Увы, вы решили дать нам много неважной информации, но забыли упомянуть класс предметов в Assigned
, поэтому давайте предположим, что он имеет тип MyClass
.
class MyClass
{
public Datetime ReturnDate {get; set;}
...
}
class Item
{
...
public ICollection<MyClass> Assigned {get; set;}
}
Это решит вашу проблему: Any(...)
работает, и вы уверены, что люди могут помещать в коллекцию только MyClass
объекты.
Если вы не хотите ограничивать свою коллекцию объектами MyClass, вы можете, по крайней мере, ограничитьсяклассы со свойством ReturnDate
:
interface IMyInterface
{
public Datetime ReturnDate {get; set;}
}
class Item
{
...
public ICollection<IMyInterface> Assigned {get; set;}
}
Если вы действительно хотите, чтобы люди могли добавлять в коллекцию другие вещи, кроме MyClass
объектов, что я настоятельно рекомендую, вам нужно будет указать, что вы хотите:
- Игнорировать элементы в коллекции, которые не являются объектами MyClass?Используйте
OfType
- Просто надеетесь, что никто никогда не поместит что-то еще в коллекцию?Используйте
Cast
, но опять же: почему бы не предотвратить, чтобы кто-то поместил неверный объект в класс, и определите ICollection<MyClass>
?
OfType
, вероятно, не работает AsQueryable
, в этомВ этом случае вам следует переместить данные в локальный процесс, используя AsEnumerable
.Третья причина использовать правильный тип для права ICollection.
IsAvailable = !b.Assigned.OfType<MyClass>().Any(h => h.ReturnDate == null);
IsAvailable = !b.Assigned.Cast<MyClass>().Any(h => h.ReturnDate == null);
Первая причина будет игнорировать элементы вашей коллекции с другими типами.Последний вызовет исключение, если в вашей коллекции есть другой тип (четвертая причина сделать его ICollection<MyClass>