我想从DataTable中选择一些记录并在Dropdown列表中绑定,有时我必须在dataTable中选择acc_id = 1的位置,在某些情况下我必须选择acc_id = 1和acc_id = 5的位置。 我如何使用&&运算符,如果只有一个条件,则下面的查询工作正常。如果我添加AND(&&)运算符在Resultsets中没有任何内容。
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();
请允许我。
答案 0 :(得分:3)
对于记录,acc_id
一次只能 1 或 5 ,并且您的条件是acc_id
应为1
和5
在同一时间(这是不可能的)。因此,您需要使用或运算符||
而不是运算符&&
。现在它将带来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;
答案 1 :(得分:3)
如上所述,您应该使用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
答案 2 :(得分:1)
您可能希望使用or
,因为acc_id
不能同时为1和5。
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
答案 3 :(得分:1)
扩展评论,您需要Or
运算符而不是And
: -
var query = from a in dt.AsEnumerable()
where a.Field<Int64>("acc_id") == 1 || a.Field<Int64>("acc_id") == 5
select a;
答案 4 :(得分:1)
如果您要使用 acc_id == 1 和 acc_id == 5 检索记录,则应使用OR。
如果使用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();