2

私はこのようなクラスを持っています

public class Product
{
    public int Id {get;set;}
    public string Name {get;set;}
    public Category Category {get;set;}
}

今、Linqでリストをクエリしたい

var result = from p in products
             select p;

私が達成したいのは、空の場合、結果がデフォルトのカテゴリを設定することです。

私にできることはこれです

var result = from p in products
             select new Product()
             {
                 Id = p.Id,
                 Name = p.Name,
                 Category = p.Category ?? new Category() 
             }

しかし、それにはすべてのフィールドを再度設定する必要があります。しかし、私の実世界のエンティティには 3 つではなく約 50 のプロパティがあり、将来別のプロパティを追加する場合はコードを編集する必要があるため、それは私が望むものではありません。私が考えているのは、次のようなものです。

var result = from p in products
             select p { Category = p.Category ?? new Category() };

しかし、それはコンパイルされません。

製品の構築中に行うように:

var product = new Product() { Category = new Category() };

私はこれを行うことができることを知っています:

foreach (var p in result)
{
    if(p.Category == null)
        p.Category = new Category();
}

しかし、結果を呼び出し元に渡しているので、現時点では製品を繰り返し処理したくありません。

4

1 に答える 1

2

Linq でこれを行うことはお勧めしません。ビジネス ロジック (null 値はデフォルトで初期化する必要があります) と DataAcess コード (get me products) を混在させています。

製品クラス自体を変更することはできませんか。「Category」プロパティを次のように変更します。

private Category _category

public Category Category 
{
    get 
    {
        if (_category == null)
            _category = new Category();

        return _category;
    }
    set
    {
        _category = value;
    }
}
于 2013-05-24T10:37:22.517 に答える