我有一个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子句中的表达式的类型不正确。请帮忙。
答案 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转换为字符串。失败的一个或多个将告诉您类型问题的位置。
我怀疑问题实际上与可以为空的类型有关。