3

この Entity を持っている Linq Query のこの使用に関して誤解の問題があります

class Content  
{          
    public string Type = "X";
    public string Name;  
    public int? Owner;  
}  

リストリストには、名前と所有者を除いてタイプが等しい2つのメンバーが含まれています(一方はnullで、もう一方はそうではありません)。だから私は、特定の所有者でコンテンツを見つけるためにクエリを実行しようとしました.何も見つからない場合は、以下で使用される他のクエリを返します:

int? owner = 1;
  var result = (
     from c in list 
     where c.Type == "X" && c.Owner == owner 
     select c
     ).FirstOrDefault(c => c.Type == "X" && c.Owner == (int?)null);

しかし、結果のメンバーはnullを返しています。このクエリの正しいステートメントはどれですか?

4

1 に答える 1

5

ここでは2 つのフィルターを適用しています。where句は、指定された所有者を持つ値のみを返します。その後、句の述語は、所有FirstOrDefault者を持たない値のみを考慮します。

私はあなたが使用することをお勧めします:

var value = list.Where(c => c.Type == "X" && 
                            (c.Owner == null || c.Owner == owner))
                .OrderByDescending(c => c.Owner)
                .FirstOrDefault();

を使用すると、null 以外の所有者を持つ値のOrderByDescendingに null 所有者を持つ値が配置されるため、最初の結果を取得すると、存在する場合は所有者を持つ値が取得されます。

于 2012-06-14T16:27:21.710 に答える