根据属性搜索

时间:2020-02-11 09:22:33

标签: c#

我有一个Employee表,让我们假设使用Columns-Name,Age,Dept。

我需要根据类似条件进行搜索

  1. 第一名:姓名,年龄,部门完全匹配
  2. 第二个:完全匹配+完全匹配(任意两个完全匹配)
  3. 第三名:完全匹配

    如果找到了第一个匹配项,那就很好了。如果没有匹配项,那么我们就需要选择第二个选项,如果两个参数之间有匹配项,我们就需要找到结果。

注意:我正在寻找通用解决方案(假设我有要搜索的属性)

示例:EMP表

enter image description here

如果用户正在搜索“ A”,21和“ CSC”,那么它很简单,我可以编写类似

的代码
context.Emp.Any(p => p.Name== "A"&& p.Age== 21&& p.Dept== "csc");

如果用户正在像“ B”一样搜索“ 19 和“ DDD”,则我可以忽略Dept DDD并返回Second row,因为没有精确匹配,然后我仅搜索两个属性Match

1 个答案:

答案 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 .:您也可以直接按公式排序,而无需先将其选择为匿名对象,但我喜欢上述方法的可读性。