【问题标题】:How to select which where clause to use based off a variable in c#?如何根据 c# 中的变量选择要使用的 where 子句?
【发布时间】:2019-09-12 22:29:24
【问题描述】:

我正在尝试压缩我的代码,以便根据 c# 变量选择用户想要使用的 where 子句。

我尝试过使用参数和我在网上看到的其他一些想法,但无法使其发挥作用。

if (btnUseDateRange.Text == "Disabled")
{
 var queryTestedControls =
 (from t in dbContext.UUT_RESULT
 where t.PART_NAME.Contains(ControlSelected)
 && t.UUT_SERIAL_NUMBER.CompareTo(BarcodeStart) >= 0
 && t.UUT_SERIAL_NUMBER.CompareTo(BarcodeEnd) <= 0
 select t.UUT_SERIAL_NUMBER).Count();

 var queryPassedControls =
 (from t in dbContext.UUT_RESULT
 where t.PART_NAME.Contains(ControlSelected)
 && t.UUT_SERIAL_NUMBER.CompareTo(BarcodeStart) >= 0
 && t.UUT_SERIAL_NUMBER.CompareTo(BarcodeEnd) <= 0
 && t.UUT_STATUS == "Passed"
 select t.UUT_SERIAL_NUMBER).Count();

 lblTested.Text = queryTestedControls.ToString();
 lblPassed.Text = queryPassedControls.ToString();
}
else if (btnUseDateRange.Text == "Enabled")
{
 var queryTestedControls =
 (from t in dbContext.UUT_RESULT
 where t.PART_NAME.Contains(ControlSelected)
 && t.START_DATE_TIME >= DateStart
 && t.START_DATE_TIME <= DateEnd
 select t.UUT_SERIAL_NUMBER).Count();

 var queryPassedControls =
 (from t in dbContext.UUT_RESULT
 where t.PART_NAME.Contains(ControlSelected)
 && t.START_DATE_TIME >= DateStart
 && t.START_DATE_TIME <= DateEnd
 && t.UUT_STATUS == "Passed"
 select t.UUT_SERIAL_NUMBER).Count();

 lblTested.Text = queryTestedControls.ToString();
 lblPassed.Text = queryPassedControls.ToString();
}

我的代码会很长,因为我正在计算 Passed、Failed、Aborted 和 Other。有没有办法压缩查询?根据 if 语句中的按钮,用户选择使用条形码范围或日期时间范围进行查询。

【问题讨论】:

    标签: c# sql asp.net entity-framework


    【解决方案1】:

    略短

    var queryTestedControls = from t in dbContext.UUT_RESULT
                              where t.PART_NAME.Contains(ControlSelected)
                              select t;
    var queryPassedControls = from t in dbContext.UUT_RESULT
                              where t.PART_NAME.Contains(ControlSelected)
                              select t;                                 
    
    if (btnUseDateRange.Text == "Disabled")
    {
        lblTested.Text = queryTestedControls.Where(t => t.UUT_SERIAL_NUMBER.CompareTo(BarcodeStart) >= 0 &&
                                    t.UUT_SERIAL_NUMBER.CompareTo(BarcodeEnd) <= 0).Count().ToString();
    
        lblPassed.Text = queryPassedControls.Where(t => t.UUT_SERIAL_NUMBER.CompareTo(BarcodeStart) >= 0 &&
                                    t.UUT_SERIAL_NUMBER.CompareTo(BarcodeEnd) <= 0 &&
                                    t.UUT_STATUS == "Passed").Count().ToString();
    }
    else if (btnUseDateRange.Text == "Enabled")
    {
        lblTested.Text = queryTestedControls.Where(t => t.START_DATE_TIME >= DateStart &&
                                    t.START_DATE_TIME <= DateEnd).Count().ToString();
    
        lblPassed.Text = queryPassedControls.Where(t => t.START_DATE_TIME >= DateStart && 
                                    t.START_DATE_TIME <= DateEnd && 
                                    t.UUT_STATUS == "Passed").Count().ToString();
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多