实体框架Linq查询过滤记录

时间:2015-08-21 07:55:47

标签: c# linq entity-framework

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

    A   B   C   D   E
    1   2   1   2   1
    2   4   2   1   4
    3   1   8   5   3 

这是我的实体,我怎么能在where子句中做到这一点。 MerchantName是字符串类型,商家ID是Int。

3 个答案:

答案 0 :(得分:2)

将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 / empty,如果指定它们将会过滤,这将为您提供所有记录。

答案 1 :(得分:0)

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

}

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

答案 2 :(得分:0)

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

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