代码之家  ›  专栏  ›  技术社区  ›  Zeus

有和或条件的Linq

  •  25
  • Zeus  · 技术社区  · 16 年前

    所以我设法让这个查询工作

    List<string> listStatus = new List<string>() ; 
    listStatus.add("Text1");
    
    List<string> listMerchants = new List<string>() ;
    listMerchants.add("Text2");
    
    
    from item in db.vw_Dropship_OrderItems
                 where listStatus.Contains(item.StatusCode) 
                          && listMerchants.Contains(item.MerchantId)
                 select item;
    

    在这里,我想检查liststatus和listmasters是否不为空,然后将它们放在where子句中。

    喜欢

    如果ListMerchants为空,则查询将如下

         where listStatus.Contains(item.StatusCode) 
    

    我不想使用开关或中频条件。

    谢谢

    3 回复  |  直到 10 年前
        1
  •  32
  •   Corey Sunwold    16 年前
    from item in db.vw_Dropship_OrderItems
        where (listStatus != null ? listStatus.Contains(item.StatusCode) : true) &&
        (listMerchants != null ? listMerchants.Contains(item.MerchantId) : true)
        select item;
    

    如果ListMerchants和ListStatus都为空,可能会产生奇怪的行为。

        2
  •  6
  •   Robert Fraser    16 年前

    好吧,你得在某个地方检查一下空值。你可以这样做:

    from item in db.vw_Dropship_OrderItems
             where (listStaus == null || listStatus.Contains(item.StatusCode)) 
                && (listMerchants == null || listMerchants.Contains(item.MerchantId))
             select item;
    
        3
  •  1
  •   mason81    10 年前

    使用lambda表达式的Linq或Condition可以执行以下操作

    DataTable dtEmp = new DataTable();
    
    dtEmp.Columns.Add("EmpID", typeof(int));
    dtEmp.Columns.Add("EmpName", typeof(string));
    dtEmp.Columns.Add("Sal", typeof(decimal));
    dtEmp.Columns.Add("JoinDate", typeof(DateTime));
    dtEmp.Columns.Add("DeptNo", typeof(int));
    
    dtEmp.Rows.Add(1, "Rihan", 10000, new DateTime(2001, 2, 1), 10);
    dtEmp.Rows.Add(2, "Shafi", 20000, new DateTime(2000, 3, 1), 10);
    dtEmp.Rows.Add(3, "Ajaml", 25000, new DateTime(2010, 6, 1), 10);
    dtEmp.Rows.Add(4, "Rasool", 45000, new DateTime(2003, 8, 1), 20);
    dtEmp.Rows.Add(5, "Masthan", 22000, new DateTime(2001, 3, 1), 20);
    
    
    var res2 = dtEmp.AsEnumerable().Where(emp => emp.Field<int>("EmpID")
                == 1 || emp.Field<int>("EmpID") == 2);
    
    foreach (DataRow row in res2)
    {
        Label2.Text += "Emplyee ID: " + row[0] + "   &   Emplyee Name: " + row[1] + ",  ";
    }