我有一个Employee表,让我们假设使用Columns-Name,Age,Dept。
我需要根据类似条件进行搜索
第三名:完全匹配
如果找到了第一个匹配项,那就很好了。如果没有匹配项,那么我们就需要选择第二个选项,如果两个参数之间有匹配项,我们就需要找到结果。
注意:我正在寻找通用解决方案(假设我有要搜索的属性)
示例:EMP表
如果用户正在搜索“ A”,21和“ CSC”,那么它很简单,我可以编写类似
的代码context.Emp.Any(p => p.Name== "A"&& p.Age== 21&& p.Dept== "csc");
如果用户正在像“ B”一样搜索“ 19 和“ DDD”,则我可以忽略Dept DDD并返回Second row,因为没有精确匹配,然后我仅搜索两个属性Match
答案 0 :(得分:2)
您可以根据比赛次数计算得分,按照得分排序并获得第一个结果。这样的事情应该起作用:
var bestMatch = context.Emp.Select(
new {
Score = (c.Age == age ? 1 : 0) + (c.Dept == dept ? 1 : 0) + (c.Name == name ? 1 : 0),
Emp = c
}).OrderByDescending(c => c.Score).FirstOrDefault()?.Emp;
P.S .:您也可以直接按公式排序,而无需先将其选择为匿名对象,但我喜欢上述方法的可读性。