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}");
给定一个 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}");