var query = from emp in dbEmp.Employees
join dept in dbEmp.Departments on emp.DeptID equals dept.DeptID
where dept.DepartmentName.Contains(this.TextBox1.Text)
select new
{
EmpID = emp.EmpID,
EmpName = emp.EmpName,
Age = emp.Age,
Address = emp.Address,
DeptName = dept.DepartmentName
};
if (query == null)
Label1.Text = "no results match your search";
GridView1.DataSource = query;
GridView1.DataBind();
一切都以正确的方式工作,但是当查询结果返回null时,标签不显示消息。标签可以无条件显示(query == null)。那么如何测试var查询结果是否返回任何内容?感谢
答案 0 :(得分:9)
如果我能教给人们关于LINQ的一件事就是:
查询表达式的值是查询而不是查询的结果。
当你说
时var q = from c in customers where c.City == "London" select c.Name;
q不包含伦敦的一系列客户名称。 q包含一个查询,表示操作查询客户数据库,如下所示...... 。查询未运行;你所做的就是创建查询。当您枚举查询时,就是查询获取结果时。
答案 1 :(得分:8)
if (!query.Any())
{
// no results
}
答案 2 :(得分:3)
您正在寻找的条件是
if (query.Count() == 0)
由于实际的query
变量将始终包含有效(非空)查询对象本身,而不是查询结果。
答案 3 :(得分:2)
查询永远不会为空。查询的结果可以是空集。您可以检查查询是否包含至少一个项目,或者可以强制它完全执行。
if (!query.Any()) {
// no results
}
GridView1.DataSource = query;
GridView1.DataBind();
或
var results = query.ToList();
if (!results.Any()) {
// no results
}
// Here you should use results instead of query because
// there is no need to re-evaluate the query again.
GridView1.DataSource = results;
GridView1.DataBind();
在这种情况下,后一种解决方案很可能更好。
答案 4 :(得分:1)
您希望避免两次评估查询,因此首先应保存其结果。然后检查它是否空白以及数据绑定或显示错误:
var results = query.ToList();
if (!results.Any())
Label1.Text = "no results match your search";
GridView1.DataSource = results;
GridView1.DataBind();