用于筛选记录的Entity Framework Linq查询

本文关键字:Framework Linq 查询 Entity 筛选 记录 用于 | 更新日期: 2023-09-27 18:09:15

我正在填充一个网格。我在屏幕上有两个"MerchantName"answers"MerchantDid"列的过滤器。如果过滤器为空并且按下了搜索按钮,则应显示所有记录;否则,如果任何过滤器具有值,则应根据该值过滤记录。我正在使用实体框架来提取数据。

merchantsList = dbContext.MERCHANT.Where();

这是我的实体,我如何在where子句中做到这一点。MerchantName是字符串类型,商人Id是Int.

用于筛选记录的Entity Framework Linq查询

用请求值替换INPUT_MERCHANTNAME和INPUT_ID。

var merchantName = INPUT_MERCHANTNAME;
int? id = INPUT_ID;
merchantsList = dbContext.MERCHANT.Where(x =>
  (id.HasValue ? x.Id == id.Value : true) ||
  (!(merchantName == null || merchantName  == "") ? x.MerchantName.Equals(merchantName) : true));

如果id和merchantName都为null/空,这将为您提供所有记录,如果指定了它们,它将进行筛选。

分离过滤器
它将使其可读性更强,并允许您在以后轻松添加更多过滤器。

var merchantName = INPUT_MERCHANTNAME;
int? id = INPUT_ID;
var list = dbContext.MERCHANT.AsQueryable();
if (!string.IsNullOrWhitespace(merchantName)) {
    list = list.Where(m => m.MerchantName == merchantName);
}
if (id.HasValue) {
    list = list.Where(m => m.Id == id.Value);
}
return list.ToList();

编辑:这将和过滤器在一起
如果你一次只想使用一个过滤器,试试这个:

var merchantName = INPUT_MERCHANTNAME;
int? id = INPUT_ID;
var list = dbContext.MERCHANT.AsQueryable();
//Lets say ID is more important than name.
if (id.HasValue) {
    list = list.Where(m => m.Id == id.Value);
}else {
    if (!string.IsNullOrWhitespace(merchantName)) {
        list = list.Where(m => m.MerchantName == merchantName);
    }
}
return list.ToList();

如果你想对两个过滤器进行OR运算:

var merchantName = INPUT_MERCHANTNAME;
int? id = INPUT_ID;
var list = dbContext.MERCHANT.AsQueryable();
list = list.Where(m => (merchantName != null && m.MerchantName == merchantName) || (id != null && m.Id == id.Value));

return list.ToList();
if(textBox.Text == "")
{
  merchantsList = dbContext.MERCHANT.ToList();
}
else
{
  merchantsList = (context.CITY.Where(q => q.MerchantName.Contains(textBox.Text))).ToList();
}

我正在使用这种技术进行搜索。