Linq Query中的AND运算符与DataTable

时间:2015-04-30 09:53:37

标签: c# linq datatable

我想从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();

请允许我。

5 个答案:

答案 0 :(得分:3)

对于记录,acc_id一次只能 1 5 ,并且您的条件是acc_id应为15在同一时间(这是不可能的)。因此,您需要使用或运算符||而不是运算符&&。现在它将带来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();