使用 DataTable 的 Linq 查询中的 AND 运算符
AND operator in Linq Query with DataTable
我想要 select DataTable 中的一些记录并绑定到下拉列表中,有时我必须 select where acc_id =1 in dataTable ,在某些情况下我必须select 其中 acc_id =1 和 acc_id=5 。
我如何使用 && 运算符,如果只有一个条件,下面的查询工作正常。如果我添加 AND(&&) 运算符在结果集中没有任何结果。
DataTable dt = new DataTable();
dt = ds.Tables[0];
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 && a.Field<Int64>("acc_id") == 5
select a;
dt = query.CopyToDataTable();
ddlAccount.DataSource = dt;
ddlAccount.DataTextField = "account_name";
ddlAccount.DataValueField = "acc_id";
ddlAccount.DataBind();
帮我。
作为记录,acc_id
一次可以是 1 或 5,您的条件是 acc_id
应该同时是 1
和 5
(这是不可能的)。所以你需要使用 or operator ||
而不是 and operator &&
。现在它将带来 acc_id
1 或 5
的记录
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
select a;
您可能想使用 or
,因为 acc_id
不能同时是 1 和 5。
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
扩展我的 评论,你需要一个 Or
运算符而不是 And
:-
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
select a;
如前所述,您应该使用 or
,而不是 and
运算符。
顺便说一下,如果您希望接受的列表 acc_id
更加动态(例如来自参数),您也可以
var ids = new[]{1, 5};//this could be passed as parameter to a method
然后
var query = dt.AsEnumerable()
.Where(m => ids.Contains(m.Field<Int64>("acc_id")));
或者当然
var query = from a in dt.AsEnumerable()
where ids.Contains(a.Field<Int64>("acc_id"))
select a
如果您想检索 acc_id == 1 和 acc_id == 5 的记录,你应该使用或。
如果使用 AND 运算符,
当第一个条件acc_id == 1时,那么符合这个条件的记录一定是acc_id = 1。
现在,第二个条件 acc_id ==5,为什么 acc_id = 1 可以通过 acc_id == 5?
DataTable dt = new DataTable();
dt = ds.Tables[0];
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
select a;
dt = query.CopyToDataTable();
ddlAccount.DataSource = dt;
ddlAccount.DataTextField = "account_name";
ddlAccount.DataValueField = "acc_id";
ddlAccount.DataBind();
我想要 select DataTable 中的一些记录并绑定到下拉列表中,有时我必须 select where acc_id =1 in dataTable ,在某些情况下我必须select 其中 acc_id =1 和 acc_id=5 。 我如何使用 && 运算符,如果只有一个条件,下面的查询工作正常。如果我添加 AND(&&) 运算符在结果集中没有任何结果。
DataTable dt = new DataTable();
dt = ds.Tables[0];
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 && a.Field<Int64>("acc_id") == 5
select a;
dt = query.CopyToDataTable();
ddlAccount.DataSource = dt;
ddlAccount.DataTextField = "account_name";
ddlAccount.DataValueField = "acc_id";
ddlAccount.DataBind();
帮我。
作为记录,acc_id
一次可以是 1 或 5,您的条件是 acc_id
应该同时是 1
和 5
(这是不可能的)。所以你需要使用 or operator ||
而不是 and operator &&
。现在它将带来 acc_id
1 或 5
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
select a;
您可能想使用 or
,因为 acc_id
不能同时是 1 和 5。
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
扩展我的 评论,你需要一个 Or
运算符而不是 And
:-
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
select a;
如前所述,您应该使用 or
,而不是 and
运算符。
顺便说一下,如果您希望接受的列表 acc_id
更加动态(例如来自参数),您也可以
var ids = new[]{1, 5};//this could be passed as parameter to a method
然后
var query = dt.AsEnumerable()
.Where(m => ids.Contains(m.Field<Int64>("acc_id")));
或者当然
var query = from a in dt.AsEnumerable()
where ids.Contains(a.Field<Int64>("acc_id"))
select a
如果您想检索 acc_id == 1 和 acc_id == 5 的记录,你应该使用或。
如果使用 AND 运算符,
当第一个条件acc_id == 1时,那么符合这个条件的记录一定是acc_id = 1。
现在,第二个条件 acc_id ==5,为什么 acc_id = 1 可以通过 acc_id == 5?
DataTable dt = new DataTable();
dt = ds.Tables[0];
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
select a;
dt = query.CopyToDataTable();
ddlAccount.DataSource = dt;
ddlAccount.DataTextField = "account_name";
ddlAccount.DataValueField = "acc_id";
ddlAccount.DataBind();