首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用<object>筛选列表list<string>并在c#中查找匹配项

使用<object>筛选列表list<string>并在c#中查找匹配项
EN

Stack Overflow用户
提问于 2015-07-01 10:51:09
回答 3查看 3.4K关注 0票数 1

我有一份名单

我想从dbCars对象中获取Car列表,条件是名称、标题、注释属性包含target_terms数组中的任何值--请注意,我并不试图查找数组包含对象属性,但我正在尝试相反&向结果动态分配一个秩

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

代码语言:javascript
复制
 List<Car> dbCars;//Values from Db 
 List<string> target_terms=new List<string> {"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<Car> _searchResult = (from item in ranked_result
                             where item.Rank != 0
                             select item.carItem).Distinct().ToList();

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

例如,如果我正在寻找柴油,如果我有两辆车名为"Swift柴油汽车“"Alto柴油汽车”,它应该返回两个结果,即我的属性标题或名称或评论中包含“柴油”一词。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-01 11:41:50

你能做到的

代码语言:javascript
复制
var _searchResult = dbCars.Cars.Where(carItem => target_terms.Any(x => carItem.Title.Contains(x) ||
                                                                       carItem.Name.Contains(x) ||
                                                                       carItem.Comment.Contains(x)));

编辑:

代码语言:javascript
复制
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);

希望这能帮上忙。

票数 4
EN

Stack Overflow用户

发布于 2015-07-01 11:30:49

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

代码语言:javascript
复制
var result = dbContext.Cars.Where(c => 
    target_terms.Any(t => 
         c.Title.Contains(t)  ||
         c.Name.Contains(t))  ||
         c.Comment.Contains(t)));

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

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

代码语言:javascript
复制
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列表有何关联。

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

票数 0
EN

Stack Overflow用户

发布于 2015-07-01 11:35:08

我没有试过,但这应该可以做到:

代码语言:javascript
复制
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)));

因为其中之一为真就足够了,所以您不必担心选择不同的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31159218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档