Проверьте, находится ли значение в коллекции с LINQ
у меня есть класс "сотрудник", у этого есть IList"TypeOfWork".
public class Employee
{
public virtual IList<TypeOfWork> TypeOfWorks { get; set; }
}
public class TypeOfWork
{
public virtual Customer Customer { get; set; }
public virtual Guid Id { get; set; }
public virtual string Name{ get; set; }
public virtual bool IsActive{ get; set; }
}
перед сохранением я бы хотел узнать, есть ли" typeofwid "(Guid) уже в коллекции" TypeOfWorks".
Я попытался это :
var res = from p in employee.TypeOfWorks
where p.Id == new Guid("11111111-1111-1111-1111-111111111111")
select p ;
и попытался это :
bool res = employee.TypeOfWorks.Where(f => f.Id == new Guid("11111111-1111-1111-1111-111111111111")).Count() != 0;
в "немедленном окне" Visual Studio, но я получаю сообщение об ошибке:выражение не может содержать выражения запроса в обоих случаях
у вас есть идея ?
спасибо,
4 ответов
только то, что ошибка говорит. Вы не можете использовать запросы LINQ в окне Immediate, поскольку они требуют компиляции лямбда-функций. Попробуйте первую строку в вашем фактическом коде, где она может быть скомпилирована. :)
кроме того, чтобы сделать все это в одной строке, вы можете использовать оператор LINQ "Any", например:
if( ! employee.TypeOfWorks.Any(tow => tow.Id == theNewGUID) )
//save logic for TypeOfWork containing theNewGUID
как о
Guid guid = Guid.NewGuid("11111111-1111-1111-1111-111111111111");
var res = from p in employee.TypeOfWorks
where p.Id == guid
select p ;
The problem is constructing the guid - otherwise the linq queries should work
Я думаю, что любой из них работает, на самом деле. Имейте в виду, что Visual Studio также не может обрабатывать запросы Linq в окне просмотра, поэтому я подозреваю, что ошибка, которую вы видели, является больше проблемой Visual Studio, чем код не работает.
попробуйте этот код, чтобы получить количество typeofwork не инициализировано.
if(employee.TypeOfWorks
.Count(f => f.Id != new Guid("11111111-1111-1111-1111-111111111111")) != 0)
{
//do something
}