使用list 过滤列表并在c#中查找匹配项

我有一个列表和列表

我想从dbCars对象中获取Car的列表,条件是Name,Title,Comment属性包含target_terms数组中的任何值[请注意我不是要查找包含对象属性的数组,但我正在尝试反向]并在运行中为结果分配一个等级

我尝试了下面的代码[将检查数组包含任何属性]

List dbCars;//Values from Db List target_terms=new List {"diesel","mechanic"}; var ranked_result = (from carItem in dbContext.Cars select new { carItem, Rank = target_terms.Contains(carItem.Title) ? 1 : target_terms.Contains(carItem.Name) ? 2 : target_terms.Contains(carItem.Comment) ? 3 : 0 }).OrderBy(i => i.Rank); //exclude results with no match (rank=0 ) and get a Distinct set of images List _searchResult = (from item in ranked_result where item.Rank != 0 select item.carItem).Distinct().ToList(); 

如何编写相同的代码来执行反向操作,即检查Car属性是否包含target_terms中的任何单词

例如,如果我正在搜索柴油,如果我有2辆名为“Swift Diesel car”“Alto Diesel car”的车,它应该返回2个结果,即我的属性标题或名称或注释包含单词“diesel”

你可以这样做,

 var _searchResult = dbCars.Cars.Where(carItem => target_terms.Any(x => carItem.Title.Contains(x) || carItem.Name.Contains(x) || carItem.Comment.Contains(x))); 

编辑:

 var _searchResult = dbCars.Cars.Where(carItem => target_terms.Any(x => carItem.Title.Contains(x) || carItem.Name.Contains(x) || carItem.Comment.Contains(x))) .Select(carItem => new { carItem, Rank = target_terms.Any(x => carItem.Title.Contains(x)) ? 1 : target_terms.Any(x => carItem.Name.Contains(x)) ? 2 : target_terms.Any(x => carItem.Comment.Contains(x)) ? 3 : 0 }) .OrderBy(carItem => carItem.Rank); 

希望这可以帮助…

我没试过但是应该这样做:

 var filteredCars = dbContext.Cars.Where(c => target_terms.Any(tt => c.Title.Contains(tt)) || target_terms.Any(tt => c.Name.Contains(tt)) || target_terms.Any(tt => c.Comment.Contains(tt))); 

因为对于其中一个是真的就足够了,所以你不必担心选择不同的值。

如果您想查找标题,名称或评论中包含target_terms中任何单词的汽车,请使用.Where查询:

 var result = dbContext.Cars.Where(c => target_terms.Any(t => c.Title.Contains(t) || c.Name.Contains(t)) || c.Comment.Contains(t))); 

不要忘记.Contains是区分大小写的;

如果你只需要匹配一个特定的单词,那就非常相似:

 var match_word = "diesel"; var result = dbContext.Cars.Where(c => c.Title.Contains(match_word) || c.Name.Contains(match_word)) || c.Comment.Contains(match_word))); 

在这种情况下,目前还不清楚这个词与target_terms列表的关系。

编辑:修复了检查包含的查询,而不是相等。