填充LINQ where语句中的可选参数

时间:2017-06-02 13:32:30

标签: c# asp.net asp.net-mvc linq c#-4.0

我有一个LINQ where语句,用于基于我过滤结果的几个参数:

 .Where(x=> x.Sales>0 && (filterWord=="" ||x.Title.Contains(filterWord.ToLower())))
  .OrderByDescending(x=>x.Sales)
  .Skip(skip)
  .Take(pageSize);

我想过滤掉所有满足要求的产品(> 0销售)......但是,对于过滤字参数,如果它的==“”,那么我不想把这个参数考虑进去。如果参数是!=“”,我想基于该参数+至少有1次销售的产品过滤掉我的收藏品。

这可以通过Where方法实现,如果是这样的话?

4 个答案:

答案 0 :(得分:1)

你的解决方案应该有效,这是另一种方式

ffmpeg -i "D:\video\Mixer test.mp4" -c:v libx265 -preset medium  -pass 1 -b:v 5000k -preset 5 -x265-params -strict-cbr -crf 28 -c:a aac -b:a 128k output.mp4

答案 1 :(得分:1)

.Where(x => filterWord == "" || (x.Title.Contains(filterWord.ToLower()) && x.Sales.Any())) .OrderByDescending(x => x.Sales) .Skip(skip) .Take(pageSize);

答案 2 :(得分:1)

对于第二部分,它将匹配空字符串而不是空字符串和标题过滤器。

.Where(x=> x.Sales > 0 && ((filterWord == "") || (filterWord != "" && x.Title.Contains(filterWord)))

答案 3 :(得分:1)

为什么要尝试让数据服务器做一些最好用代码完成的事情?

string filterWord = "m2";

IQueryable<MyTable> q = db.MyTables;

if (!String.IsNullOrEmpty(filterWord))
    q = q.Where(t=> t.Sales > 0 && t.Title.Contains(filterWord.ToLower()));

q = q.OrderByDescending(x=>x.Sales)
     .Skip(skip)
     .Take(pageSize);

q.Dump();

更新:

IQueryable<MyTable> q = db.MyTables.Where(t=> t.Sales > 0);

if (!String.IsNullOrEmpty(filterWord))
    q = q.Where(t=>t.Title.Contains(filterWord.ToLower()));

连续两个Where()将充当And。