Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 过滤记录的实体框架Linq查询_C#_Linq_Entity Framework - Fatal编程技术网

C# 过滤记录的实体框架Linq查询

C# 过滤记录的实体框架Linq查询,c#,linq,entity-framework,C#,Linq,Entity Framework,我正在填充网格。我有两个过滤器用于屏幕上的“MerchantName”和“MerchantId”列。如果过滤器为空且按下搜索按钮,则应显示所有记录,否则,如果任何过滤器具有值,则应根据该值过滤记录。我使用实体框架来提取数据 merchantsList = dbContext.MERCHANT.Where(); 这是我的实体,我如何在where子句中执行它。MerchantName为字符串类型,商户Id为Int。用请求值替换INPUT\u MerchantName和INPUT\u Id var

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

merchantsList = dbContext.MERCHANT.Where();

这是我的实体,我如何在where子句中执行它。MerchantName为字符串类型,商户Id为Int。

用请求值替换INPUT\u MerchantName和INPUT\u 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/空,则会提供所有记录,如果指定了它们,则会进行筛选

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

}
我正在使用此技术进行搜索。

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

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();
如果要删除或同时删除两个筛选器:

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();

它的给出错误:“LINQ to Entities无法识别方法‘Boolean IsNullOrWhiteSpace(System.String)’方法,并且此方法无法转换为存储表达式。”虽然这可以工作,但我不推荐它,因为它几乎不可读。最好使用简单的if/else。顺便说一句,@Rikard,你在检查id时漏掉了一个“=”,这与在一次查询中得到的不一样。现在你已经和所有过滤器之间,如何支持或?是的,它将和那些过滤器一起。我会编辑答案我不明白为什么这被否决了。请解释一下。