-3

我有一个 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 子句中的表达式类型不正确。请帮忙。

4

1 回答 1

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 = .....

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

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

然后尝试仅将 AttributeValueID 转换为字符串,最后尝试仅将 ElementClassID 转换为字符串。失败的一个或多个会告诉你你的类型问题在哪里。

我怀疑这个问题实际上与可空类型有关。

于 2012-06-13T23:23:27.963 回答