代码之家  ›  专栏  ›  技术社区  ›  Fredou

为什么linq2sql有时会添加一个像select1这样的字段作为测试,而其他字段则是有效字段

  •  6
  • Fredou  · 技术社区  · 16 年前

    我必须concat 2 linq2sql查询,我有一个问题,因为2查询返回的列数不同,奇怪的是在查询上的.ToList()之后,它们可以毫无问题地concat。

    原因是,出于某些linq2sql原因,我还有两个列test和test2,它们来自linq2sql自动创建的2个左外部联接,类似于“select” 1作为试验,

    有什么好的理由吗?如何删除这个额外的“1 as test”字段?

    下面是一些它看起来像什么的例子: google result for linq 2 sql "select 1 as test"

    1 回复  |  直到 16 年前
        1
  •  5
  •   Oleks    16 年前

    dbo.User dbo.Client . 每个 client 可能连接(或不连接)到 user 客户 记录有一个可为空的外键字段,用于标识 .

    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正在创建一个查询,以确保每一个无用户都有一个填充为null的行 客户 [test] .

    所以有 [测试] 列值设置为 1 你真的和 实体。

    我想是这样 [测试] 列被LINQ用作表示“嘿,这里是一个用户定义的客户机”的标志。

    如果我决定重写这个查询,我将使用 用户 列。