-1

この条件で空の変数を宣言したいのですが、

 if(........)
 {
  emptyIQueryable= DBContext.MyTables.Join(MyTableTwos , x => x.ID , i => i.TID ,      ((x,i)  => 
  new{
      x,i
     }
  )).Where(x => x.ID == 1).SingleOrDefault();
  }
  else
  {
   emptyIQueryable= DBContext.MyTables.Join(MyTableTwos , x => x.ID , i => i.TID , ((x,i)  => 
  new{
     x,i
     }
  )).Where(x => x.ID == 2).SingleOrDefault();
  }

どうすれば宣言できますか?

4

2 に答える 2

3

SingleOrDefaultを返さない-または null で構成されるIQueryableオブジェクトを返します。MyTablesしたがってMyTables、タイプ say のオブジェクトが複数含まれている場合MyTable、それが変数のタイプです。

MyTable result;
if(........)
{
    result = DBContext.MyTables.SingleOrDefault(x => x.ID == 1);
}
else
{
    result = DBContext.MyTables.SingleOrDefault(x => x.ID == 2);
}

アップデート。編集後はさらに複雑になります。使用している式は型 のオブジェクトを返しますIEnumerable<anonymous>。これはコードで明示的に述べることができません。objectただし、またはIEnumerableforのいずれかを使用できますが、emptyIQueryableどちらの方法でもオブジェクトに関する情報が失われます。

ただし、このコードは簡単にリファクタリングして問題を完全に取り除くことができます。

Func<MyTable, bool> condition;
if (.....)
{
    condition = x => x.ID == 1;
}
else
{
    condition = x => x.ID == 2;
}

var emptyIQueryable =
         DBContext.MyTables
                  .Join(MyTableTwos, x => x.ID, i => i.TID, ((x,i) => new {x,i}))
                  .Where(condition).SingleOrDefault();
于 2013-06-28T11:17:52.987 に答える
0

変数を代入せずに匿名型として宣言することは可能です。コンパイラの一種のトリックですが、このようにできます。

var emptyIQueryable = false 
    ? new { x = default(MyTable), i = default(MyTableTwo) } 
    : null;

emptyIQueryablenull に割り当てられ、その匿名オブジェクトは構築されません。ただし、後で作成するときとまったく同じ IL タイプがあります。コンパイラは、同じメソッドで作成され、同じ型の同じプロパティを同じ順序で持つ 2 つの匿名で型指定されたオブジェクトが同じ型を持つことを保証します。したがって、後で if ブロックで割り当てることができます。

于 2014-09-23T01:01:54.840 に答える