[英]Split string with LINQ
我想通過我的結果在我的字符串行中匹配計數。
所以這是代碼
.ThenByDescending(p => p.Title.ToLower()
.Split(' ')
.Count(w => words.Any(w.Contains)));
但它給我帶來了錯誤,並說LINQ無法將Split
解析為SQL。
LINQ to Entities無法識別方法'System.String [] Split(Char [])'方法,並且此方法無法轉換為商店表達式。
如何通過LINQ實現Split?
例如,對於此數組,它必須以這種方式排序
words = { "a", "ab" }
ab a ggaaag gh //3 matches
ba ab ggt //2 matches
dd //0 matches
這意味着Linq對實體未能找到可以寫成sql查詢的split方法的翻譯。 如果要執行拆分功能,則必須通過調用ToList()
, AsEnumerable()
等將記錄帶入內存。
var result = (from t in db.Table
select t).AsEnumerable().OrderBy(x=>x.Column).ThenByDescending(p=>p.Title.ToLower.Split(' ')....);
您需要在LINQ to Objects中執行排序,因為LINQ to Entities無法將C#代碼轉換為SQL(或您正在使用的任何DB的語言)。
你可以這樣做。
var results =
objectContext
.Where(a => a == b) //Whatever
.AsEnumerable()
.ThenByDescending(p=>p.Title.ToLower().Split(' ').Count(w=>words.Any(w.Contains)));
AsEnumerable()
(與ToArray()
或ToList()
)將LINQ to Entities轉回LINQ to Objects。
人們不能指望LINQ to Entities能夠將其轉換為SQL。
最佳解決方案是更改架構,使帖子標題中的每個單詞作為單獨的行存儲在單獨的表中(具有適當的關聯)。 然后,查詢可以使用顯式(組)連接操作或FK關聯屬性。
如果您不能這樣做並且希望查詢在數據庫上運行,那么您將不得不考慮編寫用戶定義的函數來處理分隔的字符串。 閱讀此問題以獲取更多信息。 這將是很多工作。
最簡單的解決方案(如果你能負擔得起的話)當然是把所有東西都拉回到客戶端,只需使用LINQ to Objects查詢那部分內容,如@Muhammad Adeel Zahid所述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.