我必须连接2 linq2sql查询,我有一个问题,因为2查询不返回相同数量的列,奇怪的是在查询后的.ToList()之后,它们可以连接而没有问题.
原因是,对于一些linq2sql的原因,我还有2个名为test和test2的列来自linq2sql自动创建的2个左外连接,类似"select 1 as test, tablefields"
这有什么好的理由吗?如何删除这个额外的"1作为测试"字段?
这里有一些它的样子:google结果为linq 2 sql"select 1 as test"
好吧,我们假设我们有2个表:dbo.User和dbo.Client.每个client都可以连接(或不连接)user.因此,client记录具有可识别的外键字段user.
对于查询:
var query = context.Clients
.Select(c => c.User);
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)
由于并非所有client记录都具有匹配的user记录,因此LINQ正在创建一个查询,以确保每个无用户都有一行填充空值client.这是通过创建一个额外的虚拟列来完成的[test].
因此,[test]列值设置为的行实际上已1连接到user实体.
我想这个[test]列被LINQ用作一个标志,意思是"嘿,这里是一个用户定义的客户端".
如果我决定重写这个查询,我将使用user主键作为指标,但对于LINQ来说,似乎更容易使用[test]列.
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |