gpt4 book ai didi

.net - Linq to Entities - SQL "IN"子句

转载 作者:行者123 更新时间:2023-12-03 04:07:45 25 4
gpt4 key购买 nike

在 T-SQL 中,您可以进行如下查询:

SELECT * FROM Users WHERE User_Rights IN ("Admin", "User", "Limited")

如何在 LINQ to Entities 查询中复制该内容?这可能吗?

最佳答案

你需要彻底改变你的思考方式。您不是通过“in”在一组预定义的适用用户权限中查找当前项目的用户权限,而是询问一组预定义的用户权限是否包含当前项目的适用值。这与您在 .NET 的常规列表中查找项目的方式完全相同。

使用 LINQ 有两种方法可以执行此操作,一种使用查询语法,另一种使用方法语法。本质上,它们是相同的,可以根据您的喜好互换使用:

查询语法:

var selected = from u in users
where new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights)
select u

foreach(user u in selected)
{
//Do your stuff on each selected user;
}

方法语法:

var selected = users.Where(u => new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights));

foreach(user u in selected)
{
//Do stuff on each selected user;
}

在这种情况下,我个人的偏好可能是方法语法,因为我可以通过匿名调用执行 foreach,而不是分配变量,如下所示:

foreach(User u in users.Where(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights)))
{
//Do stuff on each selected user;
}

从语法上讲,这看起来更复杂,您必须了解 lambda 表达式或委托(delegate)的概念才能真正弄清楚发生了什么,但正如您所看到的,这大大压缩了代码。

这一切都取决于您的编码风格和偏好 - 我的所有三个示例都以略有不同的方式执行相同的操作。

另一种方法甚至不使用 LINQ,您可以使用相同的方法语法将“where”替换为“FindAll”并获得相同的结果,这也适用于 .NET 2.0:

foreach(User u in users.FindAll(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights)))
{
//Do stuff on each selected user;
}

关于.net - Linq to Entities - SQL "IN"子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com