在T-SQL中,可以有如下查询:

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

在LINQ到实体查询中,您将如何复制这一点?有可能吗?

推荐答案

你需要改变你对它的看法.不是通过"in"在预定义的适用用户权限集中查找当前项的用户权限,而是询问预定义的用户权限集是否包含当前项的适用值.这与在中的常规列表中查找项目的方式完全相同.网

使用LINQ有两种方法,一种使用查询语法,另一种使用方法语法.基本上,它们是相同的,可以根据您的喜好互换使用:

Query Syntax:

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;
}

Method Syntax:

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表达式或委托的概念,才能真正弄清楚发生了什么,但正如你所看到的,这相当程度上浓缩了代码.

这一切都取决于你的编码风格和偏好——我的三个例子在做同样的事情时略有不同.

另一种方法甚至不使用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相关问答推荐

获取Ef-Core集合的DeleteBehavior

.NET Core 中的微服务

如何在 C# 中将 HTTP 发布请求发送到另一个 API?

.Net MAUI Android 无法与 API localhost 对话

MassTransit RespondAsync 无法返回空值

Owin Twitter登录-根据验证程序远程证书无效

为什么 Any() 不适用于 c# null 对象

一种消耗(所有字节)BinaryReader 的优雅方式?

Silverlight 与 Flex

添加新实体标量时实体框架 4 映射片段错误

为什么递归调用会导致不同堆栈深度的 StackOverflow?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

如何在不丢失数据的情况下重命名 Entity Framework 5 Code First 迁移中的数据库列?

C# 的浮点比较函数

所有数组在 C# 中都实现了哪些接口?

C#As的 VB.NET 类似功能

IEnumerable vs IReadonlyCollection vs ReadonlyCollection 用于公开列表成员

SqlCommand.CommandTimeout 和 SqlConnection.ConnectionTimeout 有什么区别?

.NET 图形库?

LINQ 可以与 IEnumerable 一起使用吗?