You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework 6下关联表QuoteLineItems的模糊查询问题求助

Entity Framework 6下关联表QuoteLineItems的模糊查询问题求助

我明白你现在遇到的问题了——关联表QuoteLineItems的模糊查询总是只匹配完全一致的内容,而主表ClientsName的查询却正常,确实挺让人挠头的😅

咱们先看看问题出在哪:你当前写的s.QuoteLineItems.Select(xd => xd.Description.ToLower()).Contains(search),本质是把所有QuoteLineItems的Description转成小写后生成一个字符串集合,然后用Contains判断这个集合里有没有完全等于search的元素。这就导致只有当Description完完全全是“Test”(转小写后)的时候才会命中,像“This is a Test”或者“Testing 123”这种包含“Test”但不是完全一致的内容,自然就匹配不上了。

那怎么改呢?其实只要把这部分逻辑换成Any方法就行——Any的作用是检查集合中是否存在任意一个元素满足指定条件,刚好能实现我们要的“只要有一个QuoteLineItem的Description包含搜索词就算匹配”的需求。

修改后的代码如下:

allrecords.Where(s => s.ClientsName.ToLower().Contains(search) || 
                      s.QuoteLineItems.Any(xd => xd.Description.ToLower().Contains(search)) || 
                      s.QuoteID == quoteID);

另外还有个小优化建议:你可以提前把搜索词转成小写,避免重复调用ToLower(),代码会更整洁,也能减少一点不必要的性能开销,比如:

var lowerSearch = search.ToLower();
var results = allrecords.Where(s => s.ClientsName.ToLower().Contains(lowerSearch) || 
                                    s.QuoteLineItems.Any(xd => xd.Description.ToLower().Contains(lowerSearch)) || 
                                    s.QuoteID == quoteID);

这样修改后,不管搜索词是在Description的开头、中间还是结尾,只要包含就能匹配到,和ClientsName的查询效果就一致啦。

备注:内容来源于stack exchange,提问作者MWD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:10:29