【问题标题】:IQueryable where clause checking dynamic arrayIQueryable where 子句检查动态数组
【发布时间】:2021-04-17 20:57:57
【问题描述】:

我需要知道我需要为 where 子句放置什么来过滤动态整数列表。

我一直在尝试使用IQueryable 和“数组中的位置”来搜索它,但我不知道需要更好地搜索它的术语。我一直很糟糕,查看另一个人编写的代码并复制模式而不是了解发生了什么。我就是想不通。

在我正在处理的 csharp 代码行中,我试图模仿 SQL 查询中的过滤器,它看起来如下所示,(从表中获取数据 jobs em> id =1、id=2 和 id=3)。

SELECT * FROM jobs j WHERE j.id in (1,2,3)

jobs 表可能如下所示:

CREATE TABLE jobs
{   id       [int] identity(1,1) not null,
    username [varchar](50) not null,
    category [varchar](50) not null,
    ...
}

到目前为止我所拥有的:

string csv_ids = "1,2,3";


IQueryable<MyClass> info = null;
info = from j in db.jobs

       // this is the line I'm having trouble with
       where j.id in csv_ids.Split(',') 

       select new MyClass
       {
           // getting data
       };

解决方案: 在 Roy 的帮助下,我设法朝着正确的方向前进,添加了

int[] ids = csv_ids.Split(',').Select(int.Parse).ToArray(); //since id is integer

而且,主要是

...
// here
where ids.Contains(j.id) 
...

【问题讨论】:

  • Job.Id 是什么类型? db.jobs 的结构是什么?
  • j.id 是一个整数。 db.jobs 是从 SQL 数据库中提取的数据表。 id 是主键。
  • 您能否将相关信息添加到您的问题中,以便问题易于重现?请参阅创建minimal reproducible example

标签: c# iqueryable


【解决方案1】:

使用包含检查元素列表

string csv_ids = "1,2,3";
string[] ids = csv_ids.Split(',');

var info = from j in db.jobs
       where ids.Contains(j.id)
       select new MyClass
       {};

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多