在linq查询中的WHERE

时间:2017-03-02 17:40:29

标签: c# linq

public Class SomeModel
{
   public int Id { get; set;}

   public string Name {get; set;}
}

这是我将值绑定到上面的模型的方法,它包含内联SQL查询

Public ActionResult GetData()
{
  IEnumarable<SomeModel> alltheListValues = ....
}

使用上面的方法,我想过滤掉以下字符串中包含id的所有记录。

string filterIds = "12,13,14,15"

SomeModel模型类Id值是Integer类型,但是我设置了字符串类型id,而没有循环这个,我决定使用WHERE IN查询来过滤它。

因为WHERE IN查询我们可以在Linq中获得contains

我写下了follwoing函数来过滤值

IEnumarable<SomeModel> filterValues = GetData.Where(Id=> Id.ToString().Contains(filterIds));

但这不是选择任何值总是零过滤结果,我怎么能正确写出

3 个答案:

答案 0 :(得分:1)

这可能是一种方法:

string filterIds = "12,13,14,15";

//Convert filterIds string into a integers collection
var ids=filterIds.Split(',').Select(int.Parse);

IEnumarable<SomeModel> filterValues = GetData().Where(sm=> ids.Contains(sm.Id));

我现在注意到的一件事是GetData方法的签名,我想你的意思是:

public IEnumarable<SomeModel> GetData()
{
  IEnumarable<SomeModel> alltheListValues = ....
  //...
  return alltheListValues;
}

答案 1 :(得分:0)

拥有数组/集合而不是列表,并检查id是否在其中。

App.xaml.cs

其中ActualGetData()返回IEnumarable 在您当前的代码中,GetData()返回一个ActionResult,如Drew Kennedy所提到的

答案 2 :(得分:0)

如果您确定“Id”集合的所有元素都可以转换为数字,那么您可以使用以下方法。

var models = new List<SomeModel>(); //Consider that this collection is coming from some service or repository.
var Ids = filterIds.Split(',').Select(x => int.Parse(x));
IEnumarable<SomeModel> filterValues = models.Where(n => Ids.Contains(n.Id));

你的代码没有编译,所以我在这里只是发布逻辑代码​​。您可以根据自己的要求使用它。