繁体   English   中英

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

[英]Comparison operators not support for 'System.String[]' in a Linq query

我正在研究一个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
参数“值”是错误的类型。 预期为“ System.String”。 实际的“ System.String []”。

任何帮助表示赞赏!

谢谢大家的帮助。 我已经解决了这个问题,实际上很容易。 由于我要读取的表很小,因此我可以将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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM