LINQ查询复杂的联接问题



所以我试图将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。你无法将它们相互比较。它必须具有以相同顺序声明的相同类型的相同属性。只需选择名称bd中的一个并使用该名称。

...
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() }

在该示例中,两个匿名对象将具有相同的属性定义(SalesPeriodIdb

不要拘泥于将完整的联接条件放入'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()

相关内容

  • 没有找到相关文章

最新更新