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

发布于 2024-07-29 06:20:05 字数 891 浏览 3 评论 0原文

我有一个类“Employee”,它有一个 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 的“立即窗口”中,但我收到错误:表达式不能包含查询表达式 在这两种情况下

你有想法吗?

谢谢,

I have a class "Employee", this has an IList<> of "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; }
}

before saving, I'd lile to know if "typeofwid" (a Guid) is already in the "TypeOfWorks" collection.

I tried this :

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

and tried this :

bool res = employee.TypeOfWorks.Where(f => f.Id == new Guid("11111111-1111-1111-1111-111111111111")).Count() != 0;

in the "Immediate Window" of Visual Studio but I receive the error : Expression cannot contain query expressions in both case

Do you have an idea ?

Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

许仙没带伞 2024-08-05 06:20:05

正是错误所说的。 您无法在立即窗口中使用 LINQ 查询,因为它们需要编译 lambda 函数。 尝试实际代码中的第一行,可以对其进行编译。 :)

另外,要在一行中完成这一切,您可以使用 LINQ“Any”运算符,如下所示:

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

Just what the error says. You can't use LINQ queries in the Immediate Window because they require compilation of lambda functions. Try the first line in your actual code, where it can be compiled. :)

Also, to get this all done in one line, you can use the LINQ "Any" operator, like so:

if( ! employee.TypeOfWorks.Any(tow => tow.Id == theNewGUID) )
    //save logic for TypeOfWork containing theNewGUID
懷念過去 2024-08-05 06:20:05

怎么样:

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

问题是构建 guid - 否则 linq 查询应该可以工作

How about this:

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

煞人兵器 2024-08-05 06:20:05

事实上,我认为其中任何一个都有效。 请记住,Visual Studio 也无法处理监视窗口中的 Linq 查询,因此我怀疑您看到的错误更多的是 Visual Studio 问题,而不是代码无法正常工作。

I think either of those work, actually. Keep in mind Visual Studio can't handle Linq Queries in the watch window either, so I suspect the error you saw is more of a Visual Studio problem than the code not working.

离去的眼神 2024-08-05 06:20:05

尝试此代码来获取未初始化的 typeofwork 的计数。

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

Try this code to get the count of typeofwork not initialized.

if(employee.TypeOfWorks
    .Count(f => f.Id != new Guid("11111111-1111-1111-1111-111111111111")) != 0)
{
    //do something
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文