实体框架,如何将 IQueryable 与多个 where 转换为 SQL 一起使用?

Posted

技术标签:

【中文标题】实体框架,如何将 IQueryable 与多个 where 转换为 SQL 一起使用?【英文标题】:Entity Framework, how to use IQueryable with multiple where are translated to SQL? 【发布时间】:2017-12-18 23:58:18 【问题描述】:

这里的一切都是IQueryable

    这 2 个示例是否生成相同的 SQL 查询? 添加多个 Where 被转换为 SQL 为 AND ? 有没有办法添加多个Where连接为OR?

示例 1:

client = client.Where(c => c.FirstName.StartsWith("F")); 
client = client.Where(c => c.LastName.StartsWith("T")); 
return client.ToList();

示例 2:

client = client.Where(c => c.FirstName.StartsWith("F") AND c.LastName.StartsWith("T")); 
return client.ToList();

【问题讨论】:

【参考方案1】:

多个 where 子句有效。相当于:

client = client.Where(c=> c.FirstName.StartsWith("F") && c.LastName.StartsWith("T"));

在您的情况下,它将在 .ToList() 调用中发送到 SQL。 它将被执行的其他情况包括: .Any()、.First()/.Last()/.FirstOrDefault()/etc.、.Count()。

【讨论】:

【参考方案2】:

试用代码

client = client.Where(c => (c.FirstName.StartsWith("F") && c.LastName.StartWith("T"))).ToList();

或使用的条件

 client = client.Where(c => (c.FirstName.StartsWith("F") || c.LastName.StartWith("T"))).ToList();

【讨论】:

【参考方案3】:

在 LINQ 中添加多个条件有多种方法。请点击here!了解更多信息。谢谢。

【讨论】:

以上是关于实体框架,如何将 IQueryable 与多个 where 转换为 SQL 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

您可以在带有实体框架核心的 Iqueryable 中使用带有 let 语句的字典吗?

实体框架代码优先 IQueryable

试图模拟 IQueryable 实体框架查询

在循环中使用 IQueryable 的实体框架 WHERE OR 查询

FakeItEasy DbSet / IQueryable<T> - 实体框架 6

如何将实体框架用于具有多个客户端的应用程序