Linq to sql 为什么linq2sql有时会添加一个类似select1的字段作为test,而其他字段则是有效字段
我必须解析2 linq2sql查询,我有一个问题,因为2查询返回的列数不同,奇怪的是在查询上的.ToList()之后,它们可以毫无问题地解析 原因是,出于某种linq2sql原因,我又有两个列,名为test和test2,它们来自linq2sql自动创建的两个左外部联接,类似于“选择1作为测试,tablefields” 有什么好的理由吗?如何删除这个额外的“1作为测试”字段Linq to sql 为什么linq2sql有时会添加一个类似select1的字段作为test,而其他字段则是有效字段,linq-to-sql,Linq To Sql,我必须解析2 linq2sql查询,我有一个问题,因为2查询返回的列数不同,奇怪的是在查询上的.ToList()之后,它们可以毫无问题地解析 原因是,出于某种linq2sql原因,我又有两个列,名为test和test2,它们来自linq2sql自动创建的两个左外部联接,类似于“选择1作为测试,tablefields” 有什么好的理由吗?如何删除这个额外的“1作为测试”字段 下面是它的几个示例:好的,假设我们有两个表:dbo.User和dbo.Client。每个客户端都可以连接(或不连接)到用户。
下面是它的几个示例:好的,假设我们有两个表:
dbo.User
和dbo.Client
。每个客户端
都可以连接(或不连接)到用户
。因此,客户端
记录有一个可为空的外键字段,用于标识用户
对于查询:
var query = context.Clients
.Select(c => c.User);
LINQ将生产类似的产品:
SELECT [t2].[test], [t2].[Id], [t2].[Username], ...
FROM [dbo].[Client] AS [t0]
LEFT OUTER JOIN (
SELECT 1 AS [test], [t1].[Id], [t1].[Username], ...
FROM [dbo].[User] AS [t1]
) AS [t2] ON [t2].[Id] = [t0].[UserId]
由于并非所有客户机
记录都有匹配的用户
记录,因此LINQ正在创建一个查询,以确保每个无用户的客户机
都有一行空值。这是通过创建一个名为[test]
的额外虚拟列来完成的
因此,将[test]
列值设置为1
的行实际上连接到user
实体
我假设这个[test]
列被LINQ用作一个标志,表示“嘿,这是一个用户定义的客户机”
如果我决定重写此查询,我将使用
user
主键作为指示符,但对于LINQ来说,使用[test]
列似乎更容易。我看到过,这很奇怪,据我所知,您对此无能为力。我从未见过它导致问题-如果它破坏了你的应用程序,你应该发布失败的实际代码。遗憾的是,我无法发布导致问题的实际代码。也许你应该在一个示例中重现你的症状,你可以发布代码片段?谢谢!这是我的同事和我试图弄明白的一个谜!