linq 查询:让包含语句

Posted

技术标签:

【中文标题】linq 查询:让包含语句【英文标题】:linq query : let with include statement 【发布时间】:2013-12-19 20:21:31 【问题描述】:

当我执行这个请求时

var req = (from A in _context.STUDENT.Include("RESULT")
                   select A).ToList();

我有预期的结果:对于每个学生,我都有一些结果

但是当我添加如下 let 语句时,对于每个学生,我有 0 个结果

var req = (from A in _context.STUDENT.Include("RESULT")
                   let b = 1
                   select A).ToList();

我做错了什么还是已知问题或其他什么?

【问题讨论】:

好吧,理论上let 是无操作的,因为你从不使用b 做任何事情。 (请注意,第一个查询还执行身份选择,这不会产生任何效果。)我猜您对它的使用会以某种方式混淆查询提供者。你到底想在这里做什么? 我的真实查询更复杂。我在 where 子句的 let 语句中使用变量。但为了简化,我以这个模拟查询为例。 您不认为 where 子句是需要添加的重要信息吗?很可能 where 子句是返回 0 结果的原因,而不仅仅是您的示例所暗示的包含 let 语句。 您使用的是什么 linq 提供程序?您可能想用实体框架等标记您的问题,因为它们的操作方式不同。我无法想象这是一个 linq-to-objects 问题。 "let" 根本不应该修改行为..所以也许这是您查询的其他内容?你能添加整个查询吗?也许这样我们就可以理解为什么会发生.. 【参考方案1】:

未使用的let 语句应该不会影响您的查询。

为了确定,打开登录并在控制台输出中亲自查看生成的 TSQL 对于两个查询是相同的:

myContext.Log = Console.Out;

【讨论】:

以上是关于linq 查询:让包含语句的主要内容,如果未能解决你的问题,请参考以下文章

如果不支持包含,您如何在 LINQ to Entities(实体框架)中执行 SQL 样式的“IN”语句?

c# linq 动态多条件查询语句的写法

c# ef框架怎么使用linq语句多表查询?

求助LINQ语句按照时间查询

Linq语句查询

LINQ中的一些查询语句格式