使用具有多个条件的连接时LINQ to SQL查询错误

时间:2012-06-13 21:18:40

标签: c# linq

我有一个linq查询

from elements in context.Catalog_Element
    join elementattributevalues in context.Catalog_ElementAttributeValue 
         on elements.ElementID equals elementattributevalues.ElementID
    join allowedsubcomponents in context.Catalog_AllowedSubComponents
         on new { AttributeValueID = elementattributevalues.AttributeValueID, 
                  ElementClassID = elements.ElementClassID }
         equals new { AttributeValueID = allowedsubcomponents.AttributeValueIDFilter, 
                  ElementClassID = allowedsubcomponents.ClassIDFilter }
    where allowedsubcomponents.ElementID == 
           new Guid("8c139311-f7cd-4961-a8bb-0d8dd923049e")
    select new
    {
        elements.ElementNumber,
        elements.Description
    })

这显示了一个语法错误,因为Join子句中的表达式的类型不正确。请帮忙。

1 个答案:

答案 0 :(得分:1)

错误消息清楚地告诉您类型不匹配,因此您确实需要确认类型。

我会为四个字段中的每一个(分别更改表格和字段)执行此操作,以查看其类型报告的内容:

// look at these in debugger or write them to console
var myFirstType = context.Catalog_ElementAttributeValue
    .Take(1)
    .Select (x => x.AttributeValueID)
    .GetType()
    .ToString();

var mySecondType = .....

此外,您可以通过将数据强制转换为字符串来快速查看您的join子句,看看它是否有效:

on new 
{ 
    AttributeValueID = elementattributevalues.AttributeValueID.ToString(),  
    ElementClassID = elements.ElementClassID.ToString() 
} 
equals new 
{   
    AttributeValueID = allowedsubcomponents.AttributeValueIDFilter.ToString(),  
    ElementClassID = allowedsubcomponents.ClassIDFilter.ToString() 
} 

然后尝试将AttributeValueID转换为字符串,最后尝试将ElementClassID转换为字符串。失败的一个或多个将告诉您类型问题的位置。

我怀疑问题实际上与可以为空的类型有关。