【问题标题】:how to know if my linq query returns null如何知道我的 linq 查询是否返回 null
【发布时间】:2010-11-09 10:12:38
【问题描述】:

我有这个 linq 查询:

var myQuery = from Q in myDataContext
          select Q.Name

当我尝试这样做时: listView.ItemsSource = myQuery

它有时会抛出异常,因为myQuery 中没有元素

我尝试了很多方法,例如:if(myQuery.count!=0)if(myQuery.Any()) 但没有任何效果,那么如何确定我的查询是否返回 null ?

【问题讨论】:

  • “没有任何效果”是什么意思?你得到了什么错误?您可以发布您尝试过的代码吗?
  • @Guffa 说得对,你错过了一个表名。

标签: c# .net wpf linq


【解决方案1】:

您可以将结果实现为列表:

var myQuery = (from Q in myDataContext select Q.Name).ToList();

现在您可以查看商品数量了:

if (myQuery.Count > 0) ...

您也可以在原始查询中使用Count() 方法,但随后您将运行该查询两次,一次用于计数项目,一次用于使用它们。

【讨论】:

  • var myAppointmentsQuery = from myApp in DC.Appointments where (myApp.Appointment_Date == datePicker_showAppointmentDate.SelectedDate && myApp.Doctor.Name == comboBox_showAppointmentsDoctor.SelectedItem.ToString())选择新的 { myApp.Patient.名称,myApp.Appointment_Time }; if (myAppointmentsQuery.Count()!=0) { listView_appointmentsList.ItemsSource = myAppointmentsQuery; }
  • @Mouayad:应该可以。但是,您应该从 UI 字段获取输入并在查询中使用它们之前对其进行验证。无效输入是代码有时会失败的最可能原因。
  • 你能用 myQuery.Any() 代替 myQuery.Count>0 吗?
  • @EGP:是的,但这只是绕道而行。
【解决方案2】:

LINQ 查询永远不应该返回 null,如果结果为空,您也不应该得到异常。您的代码中可能有错误。

您发布的代码似乎缺少表名。您确定您发布的代码是给您带来问题的代码吗?

【讨论】:

  • 我认为他在描述结果为 0 条记录的情况,稍后在该查询上调用 ToList() 会引发异常。
  • @eranotzer:为什么调用 ToList 会引发异常?我相当肯定它只会返回一个包含零元素的列表。
  • 我需要再次检查一下,但我记得在 0 结果上调用通用 ToList() 时发生的类似情况引发了异常。我会就此事与您联系。
【解决方案3】:

您可以将其转换为列表,然后检查计数

var result = (from Q in myDataContext select Q.Name).ToList();
if(result.Count > 0)
{
 // Perform some operation
}

或者您可以进行空值检查,因为默认情况下 linq 查询返回空值而不是空列表。

var result = (from Q in myDataContext select Q.Name);
if(result != null)
{
 // Perform some operation
}

【讨论】:

    【解决方案4】:

    你可以试试这个

    var myQuery = from Q in myDataContext
    if(myQuery != null ) 
    {
      // TO SOME THING HERE
    }
    

    或者你可以另外检查结果中是否有列表

    var myQuery = from Q in myDataContext
    if(myQuery != null && myQuery.Count > 0  ) 
    {
      // TO SOME THING HERE
    }
    

    【讨论】:

      【解决方案5】:

      最好的方法是使用 Any() 而不是 count() 来检查列表中是否有 null(没有项目)

      var myQuery = (from Q in myDataContext select Q.Name).ToList(); 现在您可以检查项目的数量:

      如果 (myQuery.Any()) ...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-01
        相关资源
        最近更新 更多