【问题标题】:Accessing foreign keys through LINQ通过 LINQ 访问外键
【发布时间】:2011-09-11 02:36:39
【问题描述】:

我在 SQL Server 2008 上进行了设置。我有三个表。一个有一个字符串标识符作为主键。第二个表将索引保存到属性表中。第三个只是将外键保存到两个表中 - 这样属性本身就不会保存在第一个表中,而是被引用。显然这在数据库规范化中很常见,尽管它仍然很疯狂,因为我知道,因为键是一个字符串,所以每 30 个第一个表室条目最多需要 1 个属性才能产生空间优势,更不用说时间和复杂性问题。

如何编写 LINQ to SQL 查询以仅返回第一个表中的值,以便它们仅包含特定属性,如第二个表中的列表中定义的那样?我尝试使用JoinGroupJoin,但显然SQL Server 2008 不能使用元组作为返回值。

【问题讨论】:

    标签: c# sql linq asp.net-4.0


    【解决方案1】:

    “我尝试使用 Join 或 GroupJoin,但显然是 SQL Server 2008 不能使用元组作为返回 价值”。

    您可以使用匿名类型来代替 Linq2SQL 支持的元组。

    IE:

    from x in source group x by new {x.Field1, x.Field2}
    

    【讨论】:

    • 这是正确的答案。在我看来,这两个 应该 是相同的,但事实并非如此。这绝对像我想要的那样工作!谢谢。
    【解决方案2】:

    我不太清楚你在问什么。一些代码可能会有所帮助。你在寻找这样的东西吗?

    var q = from i in ctx.Items
            select new 
            {
                i.ItemId,
                i.ItemTitle,
                Attributes = from map in i.AttributeMaps
                             select map.Attribute
            };
    

    【讨论】:

    • 这正是我所需要的,谢谢!我不得不选择你们和 Catalin 中的一个作为接受的答案,我选择了他的,因为他明确地将其称为匿名类型,这使我能够找到我需要的其他参考资料。
    【解决方案3】:

    当我知道我想使用的 sql 方法时,我一直使用这个页面来计算复杂的 linq 查询。

    VBhttp://msdn.microsoft.com/en-us/vbasic/bb688085

    C#http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

    如果您知道如何编写 sql 查询来获取所需的数据,那么本文将向您展示如何将其转换为 linq 语法来获得相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2019-07-01
      相关资源
      最近更新 更多