簡體   English   中英

如何在episerver find中的字符串列表中搜索子字符串

[英]How to search for substring in a list of strings in episerver find

我有一個這樣的字符串列表

"Users": [
    "usrName|Fullname|False|0|False|False",
    "usrName|Fullname|False|0|False|False",
    "usrName|Fullname|False|0|False|False",
    "usrName|Fullname|False|0|False|False",
    "usrName|Fullname|False|0|False|False",
   
]

在我的 episerver/optimizely 代碼中,我想匹配項目。 我寫了這行代碼

searchResult.Filter(x => x.Users.MatchContained(k=> k.Split('|')[3], "0"));

我試圖讓所有用戶在“管道”上拆分后在索引 3 處得到 0。我沒有得到結果,事實上我得到了一個例外。

我在這里做錯了什么?

由於您遺漏了很多細節,因此這些是我的假設

  • UsersIList<string> Users
  • 您正在嘗試獲取該列表/數組中索引 3 等於 0 的所有用戶

我們不知道的是,除其他外

  • 是否有多個頁面實例填充了用戶實例?

無論如何,在當前系統設計中使用任何 Find API 都無法解決這個問題。 相反,您需要依靠 linq 來解析結果,但可能不需要 Find 實現。

var searchClient = SearchClient.Instance;
var search = searchClient.Search<BlogPage>();
var result = search.GetContentResult();

var usersResult = result
    .SelectMany(x => x.Users)
    .Where(x => x.Split('|')[3].Equals("0"));

這將創建並返回一個與此類似的對象,因為我使用的是 SelectMany,因此該數組將包含整個系統中的所有用戶,其中存在來自搜索結果的匹配頁面。

在此處輸入圖像描述

如果您出於某種原因想要保留或查看某些頁面屬性,則可以使用其他方法在選擇中構造新對象並刪除不匹配用戶的任何對象

var searchClient = SearchClient.Instance;
var search = searchClient.Search<BlogPage>();
var result = search.GetContentResult();

var usersResult = result
    .Select(p => new
    {
        PageName = p.Name,
        ContentLink = p.ContentLink.ToString(),
        Users = p.Users.Where(x => x.Split('|')[3].Equals("0"))
    })
    .Where(x => x.Users.Any());

在此處輸入圖像描述

如果您想繼續使用 Find 進行這種實現,則必須以比帶分隔符的字符串更好的方式存儲數據。

暫無
暫無

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

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