我想通過使用.Contains()來獲取記錄
。
var question= ""/span>。
var allLanguage = new List<USerLanguage> ()
{
new USerLanguage(){LanguageName="English (United States)", LanguageCode="en-US"},
new USerLanguage(){LanguageName="German (Germany)",LanguageCode="de-DE"}。
new USerLanguage(){LanguageName="French (France)"/span>, LanguageCode="fr-FR"/span>}。
};
var language = allLanguage.Where(r => r.LanguageName.ToLower().Contains(question)).ToList()。
現在,當我把問題傳成"change language to french"時,我沒有得到任何記錄,但當我把問題只傳成"french"時,我得到了記錄。
如何通過傳遞問題為 "改變語言為法語 "來獲得正確的記錄?
更新 - 我想傳遞一個像change language to french的句子,我想把french這個詞與USerLanguage物件的LanguageName屬性相匹配
uj5u.com熱心網友回復:
假設你想簡單地回傳所有包含問題中提到的語言的UserLanguage物件,你可以做以下作業:
更新UserLanguage物件,使之與問題中提到的語言一致。
更新UserLanguage物件,所以你有一個包含國家的新屬性。從LanguageName中洗掉國家。我將其設定為一個字串,但它可以是一個帶有 "名稱"、iso代碼等的國家物件。然后你可以把LanguageCode移出來,因為它可能會與國家代碼相匹配,而國家代碼現在可以放在Country物件中:
public class UserLanguage
{
public string LanguageName { get; set; }
public string LanguageCode { get; set; }
public string Country { get; set; }
//任何其他你可能有的屬性。
}
使用這樣的物件將允許你搜索問題,看它是否包含任何UserLanguage.LanguageName's:
。var culture = CultureInfo.CurrentCulture;
var language = allLanguage.Where(l => culture.CompareInfo.IndexOf(question, l.LanguageName, CompareOptions.IgnoreCase) >=0) 。
大小寫不敏感的比較在這里找到。大小寫不敏感的'Contains(string)'
需要注意的一點是,這意味著你有可能用該語言回傳多種語言。使用法語,有很多國家都以法語為主要語言。
Update()
Update 如果你真的不想改變UserLanguage物件,那么你可以在分隔符上分割LanguageName。然而,我認為你目前的選擇是在空白處分割,這可能會給某些語言(如 "漢語")帶來問題。這真的取決于你是如何填充這個串列的。
這將檢查問題是否包含任何與LanguageName相匹配的內容,一旦它在第一個括號處被分割開來,取其第一部分(因此索引為0)并洗掉該第一部分的任何尾部空白。
標籤:var language = allLanguage.Where(l => culture.CompareInfo.IndexOf(question, l. LanguageName.Split('(')[0].Trim(), CompareOptions.IgnoreCase) >=0)。)
