簡體   English   中英

如何獲得正確的實體中的二進制字符串交集到Linq查詢的結果

[英]How to get a correct result of binary string intersection in Entity to Linq query

我將數據保存在二進制外觀的字符串“ 100010”中。 我想檢查它在與其他字符串“ 100000”對應的位置是否具有相同的值。 因此,我嘗試使用“交集”。 在這種情況下,相交的結果將為“ 100000”,可以將其視為我需要的項目。 但是,當我查詢Entity to Linq語句時如何使用這種概念?

這是我的想法:

var chemicals = db.ChemicalItem.Where(c => c.CategoryNumber.ToCharArray().Intersect(catekey.ToCharArray()).Count()>0);

“ CategoryNumber”是我的數據,“ catekey”是用於比較的字符串。 它們都是二進制外觀字符串(最多6個字符)。 如果計數不為0,則它​​們在同一索引中為'1'。 我可以得到正確的查詢。

可悲的是,它沒有用。 我總是收到DbExpressionBinding錯誤。 有人可以告訴我怎么了嗎? 謝謝。

PS:我英語不好,請在第一時間在這里發問,對不起我的表達,並感謝您的閱讀。

LINQ to Entities試圖根據您的條件創建SQL查詢,但無法為您指定的表達式執行此查詢。

解決該問題的一種方法是用代碼而不是SQL進行過濾,但這會影響性能,因為所有記錄都將檢索到客戶端並在那里進行過濾。 這是您可以做到的方式(請注意添加的ToList() ):

var chemicals = db.ChemicalItem.ToList().Where(c => c.CategoryNumber.ToCharArray().Intersect(catekey.ToCharArray()).Count()>0);

建議的方法是在SQL中進行過濾,但是在這種情況下,您將需要在SQL中編寫一個等效的存儲過程,該過程將進行過濾並從EF代碼中調用它。 這樣的過濾仍然不是很有效,因為SQL將無法使用任何索引,並且將始終需要進行表掃描。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM