比较运算符不支持Linq查询中的“System.String []”

时间:2014-02-12 10:40:33

标签: c# linq linq-to-sql

我正在使用Linq查询来连接两个表中的数据(使用Linq到SQL),逻辑如下:

  • 横幅包含一个以逗号分隔值的字段。我想拆分此列并有一个ID列表(例如1,2,3,4)
  • 引用包含这些映射的列表,其中横幅中的ID与参考表中的ID之间的映射为1:1
  • 合并表后,我想从参考表中返回描述,这是ID的文本表示。

我已经习惯了这一段时间并打了一堵砖墙。下面是我正在使用的代码(在LinqPad中):

var results = (from b in Banners
         where b.BannerCode == "1234"
         from a in b.VesselBoatAreaY.Split (',').AsEnumerable()
         join r in References on a equals r.ReferenceCode
         where r.Context == "TestContext" 
         select r.Description).ToList();

我已确认查询的第一部分有效,即横幅代码存在并返回4个单独的值。当我作为一个整体运行查询时,我得到以下内容:

  

NotSupportedException异常   类型'System.String []'不支持比较运算符。

我也尝试了以下内容:

var results = (from b in Banners
               where b.BannerCode == "1234"
               from a in b.VesselBoatAreaY.Split (',').AsEnumerable()
               from r in References
               where r.Context == "TestContext" &&
               a.Contains(r.ReferenceCode)
               select r.Description).ToList();

当我运行时,我得到以下内容:

  

的ArgumentException
  参数'value'是错误的类型。预期'System.String'。实际'System.String []'。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

感谢大家的帮助。我已经解决了这个问题,实际上非常容易。由于我正在阅读的表非常小,我可以将AsEnumerable应用于Banners表,它工作正常。我意识到这意味着它将在内存中进行处理,因此对于更大的表来说并不好,但它对于我需要的东西来说很好。

现在参考代码:

var results = (from b in Banners.AsEnumerable()
               where b.BannerCode == "1234"
               from a in b.VesselBoatAreaY.Split (',')
               from r in References.AsEnumerable()
               where r.Context == "TestContext" &&
               a.Contains(r.ReferenceCode)
               select r.Description).ToList();