所以我试图将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() }
答案 0 :(得分:3)
简单,它们不是相同(兼容)类型。第一个键的类型为SalesPeriodId
,字符串类型为b
。第二个键的类型为SalesPeriodId
(可能与第一个相同),类型为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() }
答案 1 :(得分:1)
您的两个匿名类型不匹配,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
)
答案 2 :(得分:0)
不要坚持将完整的连接条件放入'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()