2

myquery の結果を表示する foreach があります。結果が 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);

}
4

5 に答える 5

2

最初にチェックを入れない理由 -

if(rs == null)
{}
else
{
  foreach.....
}
于 2012-08-15T07:14:52.827 に答える
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();
    }
}
于 2012-08-15T08:04:04.113 に答える
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 
}
于 2012-08-15T07:16:01.307 に答える
0

いいえ、foreach-else ループはありません...その機能が必要な場合は、別の種類のループ (for ループまたは do-while-loop) を使用するか、最初に要素数をテストしてください。

于 2012-08-15T07:15:49.437 に答える
0

これは、線に沿って何かを実装する方法に関する記事です。

これは、IEnumerable での通常の毎日の foreach ですが、「ループ アクション」と「else アクション」の両方を指定できます。前者から false を返してループを中断しない限り、後者はループ後に実行されます。Python より少し扱いに​​くいですが、それでも便利です。

代わりにできることは、テストでnull/空であることを確認してから、その部分ifで何かをすることです。elseただし、DB の処理を​​行う場合、結果がない場合は null を返すのではなく、空のリストを返す方が適切です。

于 2012-08-15T07:17:44.933 に答える