C# 如何知道我的linq查询是否返回null
我有一个linq查询:C# 如何知道我的linq查询是否返回null,c#,.net,wpf,linq,C#,.net,Wpf,Linq,我有一个linq查询: var myQuery = from Q in myDataContext select Q.Name 当我尝试这样做时: listView.ItemsSource=myQuery 它有时会抛出异常,因为myQuery 我尝试了很多方法,比如:if(myQuery.count!=0)或者if(myQuery.Any()) 但是什么都不起作用,所以如何确定我的查询是否返回null?LINQ查询永远不应该返回null,如果结果为空,您不应该得到异常。您的
var myQuery = from Q in myDataContext
select Q.Name
当我尝试这样做时:
listView.ItemsSource=myQuery
它有时会抛出异常,因为myQuery
我尝试了很多方法,比如:if(myQuery.count!=0)
或者if(myQuery.Any())
但是什么都不起作用,所以如何确定我的查询是否返回null?LINQ查询永远不应该返回null,如果结果为空,您不应该得到异常。您的代码中可能有错误
您发布的代码似乎缺少表名。你确定你发布的代码就是给你带来问题的代码吗?你可以通过列表了解结果:
var myQuery = (from Q in myDataContext select Q.Name).ToList();
现在,您可以检查项目数:
if (myQuery.Count > 0) ...
您也可以对原始查询使用Count()
方法,但随后将运行两次查询,一次用于计算项目,一次用于使用项目。您可以尝试此方法
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
}
您可以将其转换为列表,然后检查计数
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
}
最好的方法是检查列表中是否有null(无项),使用Any()而不是count() var myQuery=(从myDataContext中的Q选择Q.Name).ToList(); 现在,您可以检查项目数:
if (myQuery.Count > 0) ...
如果(myQuery.Any())…你说的“没有工作”是什么意思?你犯了什么错误?你能发布你尝试过的代码吗?@Guffa说得对,你错过了一个表名。var myappointmentsqury=来自DC中的myApp。约会在哪里(myApp.Appointment\u Date==datePicker\u showAppointmentDate.SelectedDate&&myApp.Doctor.name==comboBox\u showAppointsDoctor.SelectedItem.ToString())选择新建{myApp.Patient.Name,myApp.Appointment\u Time};如果(MyAppointsQuery.Count()!=0){listView_AppointsList.ItemsSource=MyAppointsQuery;}@Mouayad:应该可以工作了。但是,您应该从UI字段获取输入,并在查询中使用它们之前对它们进行验证。无效输入是代码有时会失败的最有可能的原因。你能用myQuery.Any()代替myQuery.Count>0吗?@EGP:是的,但这只是做同样事情的一个迂回。我想他在描述一个案例,结果是0条记录之后调用ToList()在该查询上会抛出异常。@eranotzer:为什么调用ToList会抛出异常?我很确定它只会返回一个包含零个元素的列表。我需要再次检查这一点,但我记得在对0结果调用泛型ToList()时发生的类似情况引发了异常。关于这件事我会再打给你的。