【问题标题】:LINQ Type arguments cannot be inferred无法推断 LINQ 类型参数
【发布时间】:2015-07-22 15:07:46
【问题描述】:

我有两个对象要加入 _locationslrsLocations。我想用相应的lrsLocations 更新_locations 属性。为此,我使用 LINQ 来获取对这两个选项的引用,然后将ms2 属性更新为lrs(我知道这不是 LINQ 的用途,所以我对新想法持开放态度。我是现在使用这个 LINQ 查询:

        var joinResult =
            from
                ms2 in _locations
            from
                lrs in lrsLocations
            where
                ms2.LRS_ID == lrs.attributes.route_id
                &&
                ms2.LRS_LOC_PT == lrs.attributes.measure
            select
                new {ms2, lrs};

它有效,但我真的需要LEFT OUTER JOIN,所以在谷歌搜索后我尝试:

var joinResult  = from ms2 in _locations
                    join lrs in lrsLocations on new { ms2.LRS_ID, ms2.LRS_LOC_PT } 
                    equals new { lrs.attributes.route_id, lrs.attributes.measure } into merge
                    from lrs in merge.DefaultIfEmpty()
                    select new { ms2, lrs };

问题是join lrs 抱怨:http://i.imgur.com/5EAeFmx.png(点击查看图片)

所以我要么需要一种方法将我的工作 LINQ 转换为 LEFT OUTER JOIN,要么了解问题在新问题中的含义,因为谷歌并没有给我太多的见解。

【问题讨论】:

  • 检查以确保LRS_IDroute_id 的类型相同,与LRS_LOC_PTmeasure 相同。如果没有,请将它们转换为正确的类型。
  • LRS_ID 和 route_id 都是string,LRS_LOC_PT 和measure 都是double?

标签: c# linq join


【解决方案1】:

您的 JOIN 中的匿名类型必须具有相同的属性名称:

join lrs in lrsLocations on new { ms2.LRS_ID, ms2.LRS_LOC_PT } 
                     equals new { LRS_ID = lrs.attributes.route_id, LRS_LOC_PT = lrs.attributes.measure }

显然 types 也必须匹配。如果他们不这样做,您需要转换或强制转换。

【讨论】:

  • 就是这样。非常感谢
猜你喜欢
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多