使用 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 一次可以是 15,您的条件是 acc_id 应该同时是 15 (这是不可能的)。所以你需要使用 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 == 1acc_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();