所以我试图将SQL转换为LINQ查询
逻辑是:
JOIN SalesPeriod SP1
ON
SP1.SalesPeriodId = SE1.SalesPeriodId AND SP1.SalePeriodId = .....(XML stuff)
但它一直抱怨equals语句两边的类型与不匹配
有什么想法吗?
注意:我声明了b和d,因为它不接受匿名类型成员我分别测试了两个相同的条件,它们都能进行
感谢
join SP1 in fentities.SalesPeriods
on new { SE1.SalesPeriodId, b = XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() }
equals new { SP1.SalesPeriodId, d = SP1.SalesPeriodId.ToString() }
很简单,它们不是相同的(兼容的)类型。第一个键具有任意类型的SalesPeriodId
和字符串类型的b
。第二个键的类型为whatever(可能与第一个键相同)的SalesPeriodId
和类型为string的d
。你无法将它们相互比较。它必须具有以相同顺序声明的相同类型的相同属性。只需选择名称b
或d
中的一个并使用该名称。
...
join SP1 in fentities.SalesPeriods
on new { SE1.SalesPeriodId, b = XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() }
equals new { SP1.SalesPeriodId, b = SP1.SalesPeriodId.ToString() }
您的两个匿名类型不匹配,b
&具体为d
。。请尝试对齐签名。。
join SP1 in fentities.SalesPeriods
on new { SE1.SalesPeriodId, b = XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() }
equals new { SP1.SalesPeriodId, b = SP1.SalesPeriodId.ToString() }
在该示例中,两个匿名对象将具有相同的属性定义(SalesPeriodId
和b
)
不要拘泥于将完整的联接条件放入'on'子句。将条件拆分为两部分,将其中一部分放入"on"子句,将另一个放入"WHERE"子句。
join SP1 in fentities.SalesPeriods
on SE1.SalesPeriodId equals SP1.SalesPeriodId
where XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() == SP1.SalesPeriodId.ToString()