簡體   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