Проверьте, находится ли значение в коллекции с 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
}