使用LINQ to SQL基于密钥连接两个表

时间:2015-02-26 03:03:04

标签: c# sql-server linq

我有两张桌子 属性(AID,名称,描述) AttributeVal(AID,值)

现在,使用LINQ我需要通过连接这两个表来获取Name,Description和Value。所以,我到了这里..

        var displayAttributeMap = dctx.Attributes.Join(dctx.AttributeDisplayNames, a => a.AttributeID, adn => adn.AttributeID, 
                                                        (a, adn) => new
                                                        {
                                                            AttributeName = a.Name,
                                                            AttributeDispName = adn.DisplayName
                                                        }
                                                       ).ToDictionary(a => a.AttributeName, a => a.AttributeDispName);

但是在这里我不知道在外键上插入条件的位置,在我的例子中它是属性ID。我在这里遗漏了什么或者我应该直接使用LINQ吗?

1 个答案:

答案 0 :(得分:0)

从我收集的内容中,您需要将值和显示在字典中的属性的显示名称。

您需要做的就是在当前查询中添加另一个联接,并稍微更改您的select和ToDictionary。我发现在处理连接时使用查询语法更容易阅读和使用。

(from attr in dctx.Attributes
    join attrDisplayName in dctx.AttributeDisplayNames on attr.AttributeID equals attrDisplayName.AttributeID
    join attrVal in dctx.AttributeVal on attr.AttributeID equals attrVal.AttributeID
select new
{
    AttributeName = attr.Name,
    AttributeDispName = attrDisplayName.DisplayName,
    AttributeID = attr.AttributeID,
    AttributeValue = attrVal.Value
}).ToDictionary(key => key.AttributeID, (value) => { return new { DisplayName = value.AttributeDispName, Value = value.AttributeValue };})

我还没有对它进行测试,但LinqPad对语法很满意,所以我认为它应该可行。