使用LINQ检查值是否在集合中

o4hqfura  于 2023-02-27  发布在  其他
关注(0)|答案(4)|浏览(249)

我有一个类"Employee",它有一个"TypeOfWork"的IList〈〉。

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的"即时窗口"中,但我收到错误:* 表达式不能同时包含查询表达式 *
你有办法吗?
谢谢你,

zc0qhyus

zc0qhyus1#

正如错误所述。不能在“即时窗口”中使用LINQ查询,因为它们需要编译lambda函数。请尝试实际代码中可以编译的第一行。:)
此外,要在一行中完成所有这些操作,可以使用LINQ“Any”运算符,如下所示:

if( ! employee.TypeOfWorks.Any(tow => tow.Id == theNewGUID) )
    //save logic for TypeOfWork containing theNewGUID
roejwanj

roejwanj2#

不如这样:

Guid guid = Guid.NewGuid("11111111-1111-1111-1111-111111111111");
var res =  from p in employee.TypeOfWorks  
    where p.Id == guid  
    select p ;

问题在于构造guid-否则linq查询应该可以工作

o7jaxewo

o7jaxewo3#

实际上,我认为这两种方法都有效。请记住,Visual Studio也不能在监 windows 口中处理Linq查询,因此我怀疑您看到的错误与其说是代码不工作,不如说是Visual Studio的问题。

iecba09b

iecba09b4#

尝试使用此代码获取未初始化的工作类型的计数。

if(employee.TypeOfWorks
    .Count(f => f.Id != new Guid("11111111-1111-1111-1111-111111111111")) != 0)
{
    //do something
}

相关问题