我有foreach来显示myquery的结果,当结果为null时它会起作用。我想知道foreach还有别的吗?当myquery的结果为null时采取行动?
var rs = from cs in db.CsCustomers
from ai in db.ArInvoices
where cs.CustomerID == ai.CustomerID &&
ai.Kategori != null
orderby cs.Unit
select new
{
cs.CustomerID,
cs.Unit,
cs.Name
};
foreach (var r in rs)
{
c = new TableCell();
c.Text = r.CustomerID;
c.RowSpan = jk;
tr.Cells.Add(c);
c = new TableCell();
c.Text = r.Unit;
c.RowSpan = jk;
tr.Cells.Add(c);
c = new TableCell();
c.Text = r.Name;
c.RowSpan = jk;
tr.Cells.Add(c);
}
答案 0 :(得分:2)
为什么不先检查 -
if(rs == null)
{}
else
{
foreach.....
}
答案 1 :(得分:1)
不,它没有else运算符。您可以将其包装在if else
var rs = from cs in db.CsCustomers
from ai in db.ArInvoices
where cs.CustomerID == ai.CustomerID &&
ai.Kategori != null
orderby cs.Unit
select new
{
cs.CustomerID,
cs.Unit,
cs.Name
};
if(rs != null && rs.Any()) //for the .Count you have to add using System.Linq;
foreach (var r in rs)
{
c = new TableCell();
c.Text = r.CustomerID;
c.RowSpan = jk;
tr.Cells.Add(c);
c = new TableCell();
c.Text = r.Unit;
c.RowSpan = jk;
tr.Cells.Add(c);
c = new TableCell();
c.Text = r.Name;
c.RowSpan = jk;
tr.Cells.Add(c);
}
}else{
//the else part
}
答案 2 :(得分:1)
也许你需要这个。无论如何,如果您经常需要空列表的默认行为,您可以创建下一个扩展方法。
void Main()
{
var elements = Enumerable.Range(0,20);
elements.ForEachWithElse(x=>Console.WriteLine (x),
()=>Console.WriteLine ("no elements at all"));
elements.Take(0).ForEachWithElse(x=>Console.WriteLine (x),
()=>Console.WriteLine ("no elements at all"));
}
public static class MyExtensions
{
public static void ForEachWithDefault<T>(this IEnumerable<T> values, Action<T> function, Action emptyBehaviour)
{
if(values.Any())
values.ToList().ForEach(function);
else
emptyBehaviour();
}
}
答案 3 :(得分:0)
不,没有foreach-else循环...如果你需要这个功能,要么使用不同类型的循环(for-loop或者do-while-loop),要么首先测试元素数量。
答案 4 :(得分:0)
Here is an article关于如何实施某些内容。
这是你每天在IEnumerable上的常规,但允许你这样做 指定“循环动作”和“其他动作”,后者是 在循环之后执行,除非你通过返回false来中断循环 来自前者。它比Python更笨拙,但仍然有用
您可以做的只是通过if
测试检查它为空/空,然后在else
部分执行某些操作。
但是,在执行DB操作时,最好在没有结果时返回空列表,而不是返回null。