c# - 表选择
问题描述
用户可以从表格中选择任何单元格组合。如果我事先不知道用户将选择多少个单元格,如何生成 LINQ 请求?
db.P.Where(p => p.Date == "01.01.2000");
db.P.Where(p => p.FirstName == "Vitaly");
但是,如果您选择不同的组合或更多单元格呢?
解决方案
有很多方法可以解决这个问题,但我认为一个简单的方法是过滤器类型。由于您允许每个属性有多个可能的值,因此过滤器应包含可以过滤的每个行属性的集合,并提供匹配函数来测试行。
例如:
class Row
{
public string Date { get; set; }
public string FirstName { get; set; }
}
class Filter
{
public ICollection<string> Dates { get; } = new HashSet<string>();
public ICollection<string> FirstNames { get; } = new HashSet<string>();
public bool Matches(Row row) =>
row != null
&& EmptyOrContains(Dates, row.Date)
&& EmptyOrContains(FirstNames, row.FirstName);
private static bool EmptyOrContains<T>(ICollection<T> filter, T value) =>
!filter.Any() || filter.Contains(value);
}
从这里您将能够用于rows.Where(i => filter.Matches(i))
选择与过滤器集匹配的所有行。
推荐阅读
- jestjs - 使用 Jest 模拟“import *”
- html - 在数字输入中添加 SVG
- python - 有人可以解释突出显示的代码吗?
- spring-boot - 如何在 Spring Boot 中记录请求和响应
- python - 用python加密程序。while 循环越界
- reactjs - 使用 Heroku 反应应用程序和 GraphQl 服务器部署问题
- python - Django 问题:django.core.exceptions.AppRegistryNotReady:尚未加载应用程序
- c# - 如何检测文本文件c#中最后两次出现的字符/数据集
- kotlin - Kotlin中这行代码的含义是什么
- sql - 在 Oracle SQL 运行期间将系统日期添加到文件名