C# Entity Framework / SQL 服务器统计匹配数据个数

C# Entity Framework / SQL Server count number of matched data

给定一个 table Foo:

table Foo (
  name,
  city,
  country,
  year,
  color,
  age
);

存储在 Foo 中的数据 table:

Peter, Brussels, Belgium, 2013, blue, 19
Dirk, Brussels, Belgium, 1999, red, 33
Jean, Paris, France, 2011, blue, 27

我要与数据库匹配的数据行:

Peter, Brussels, Belgium, 2013, blue, 19 

==> 应该给:

row 1: 100% or 6
row 2: 33% or 2
row 3: 16% or 1

再测试一行数据:

Peter, Paris, France, 2011, green, 36   

==> 应该给:

row 1: 16% or 1
row 2: 0% or 0
row 3: 50% or 3

我可以获取内存中的所有数据和 运行 一些 C# 逻辑,但这不是最聪明的事情。

是否可以在单个查询中进行这种计算(“匹配行数据的百分比”)?

奖金:

是否可以为列添加权重,以便第 3 列和第 5 列添加更高的计数权重?

通过代码优先方法将 C# 与 EF 和 SQL 服务器数据库结合使用(存储过程不是一个选项,因为数据库可能是不同的类型)。

对 returns 1 或 0 的每个条件使用三元条件运算符,并添加每个结果。您可以将1替换为其他数字来实现加权,此时百分比计算中的值6.0应替换为权重值之和。

 foos.Select(x => 
     (x.name == "Peter" ? 1 : 0) +
     (x.city == "Brussels" ? 1 : 0) +
     (x.country == "Belgium" ? 1 : 0) +
     (x.year == 2013 ? 1 : 0) +
     (x.color == "blue" ? 1 : 0) +
     (x.age == 19 ? 1 : 0))
     .Select(x => $"{Math.Round(x / 6.0 * 100, 0, MidpointRounding.AwayFromZero)}% or {x}");