通过LINQ访问外键

时间:2011-05-10 21:38:40

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

  

“我试图使用加入或   GroupJoin,但显然是SQL Server   2008年不能使用元组作为回报   值”。

您可以使用匿名类型而不是Linq2SQL支持的元组。

IE:

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

答案 2 :(得分:0)

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

VB http://msdn.microsoft.com/en-us/vbasic/bb688085

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

如果你知道如何编写sql查询来获取你想要的数据,那么这将告诉你如何获得相同的结果将其翻译成linq语法。