foreach还有其他吗?

时间:2012-08-15 07:12:24

标签: c# foreach if-statement dbnull

我有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);

}

5 个答案:

答案 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。