如何在C#中使用LINQ查询来按空或单个字符串或字符串数​​组过滤数据

时间:2017-01-10 05:17:13

标签: c# .net sql-server linq

我的方法有一个字符串参数'type',可以是null,单值或用逗号分隔的多个值,如下所示:

string type=null; //should return all rows
string type="java"; //should return data with java 
string type="xamarin,java,c#"; //should return data with all these 3 options
string type="invalid"; //should return null

如果type为空,我需要返回所有行,否则只返回与字符串数组匹配的行。

我在服务器端cs文件中使用了以下LINQ:

public object filter(string type)
{
var models = context. /// get data from db, with id,Date,type,comment as columns
return models.Where(v=> string.IsNullOrEmpty(type) ? true : type.Split(',').Contains(v.type)
.OrderByDescending(a => a.Date).ToList();

}
  

当我传递null时,它返回所有行 - 似乎正在工作

     

当我传递用逗号分隔的类型时,它返回所有类型的行 -   似乎工作

     

当我传递无效类型时,它应返回零行(不工作)

我期待一个干净的单线解决方案。

2 个答案:

答案 0 :(得分:0)

你想要这个结果

string type="invalid"; //should return null

但在您的代码中,此条件未得到处理

return type.Split(',').Contains("invalid") ? null : models
       .Where(v=> string.IsNullOrEmpty(type) ? true : type.Split(',').Contains(v.type)
       .OrderByDescending(a => a.Date)
       .ToList();

答案 1 :(得分:0)

感谢朋友们,它适用于任何情况。

return models.Where(v => string.IsNullOrWhiteSpace(type) ? true : type.Split(',').Contains(v.type) ).OrderByDescending(a => a.Date).ToList();