1

必要なアイテムだけを取得するための正しい where 句が見つからないようです。

私はディビジョンを持っています。これらにはカテゴリが含まれ、これらにはアイテムが含まれています。これらはクラスです:

public class Division    {
        public string Description { get; set; }

        public List<Category> Categories { get; set; }
    }

public class Category : IdEntity
{
    public string Description { get; set; }

    public Guid DivisionId { get; set; }

    public List<Item> Items { get; set; }
}

public class Item
{
    public Guid CategoryId { get; set; } 

    public DateTime Date { get; set; }

    public string Description { get; set; }
}

私が必要としているのは、パラメータに Id を持つ部門、この部門のすべてのカテゴリ、および各カテゴリに特定の日付を持つアイテムです。

だから今私はこれをします:

public Division GetFullDivisionByIdAndDate(Guid id, DateTime date)
    {
        using (new ChangeTrackingScope(ChangeTracking.Disabled))
        {
            var divisionGraph = new Graph<Division>().Include(d => d.Categories.Select(c => c.Items));
            var division = _divisionDL.GetFullDivisionByIdAndDate(id, divisionGraph, date);
            return division;
        }
    }

そして、私が行うDLよりも

        public Division GetFullDivisionByIdAndDate(Guid id, Graph<Division> graph, DateTime date)
    {
        using (var db = new ContextScope<DatabaseContext>())
        {
            var q = graph.ApplySetReferences(db.Context.Divisions).AsNoTracking();
            return q.SingleOrDefault(p => p.Id == id);
        }
    }

ここでは、すべてのカテゴリを含む部門を取得します (これまでのところ非常に良い) が、すべてのアイテムも取得し、パラメーターとして指定された日付を持つアイテムのみが必要です。誰でもこれを行う方法を知っていますか?

4

1 に答える 1

1

Graphいくつかのメソッド ( 、 ) が欠落しているため、コードにあまりアクセスできないため、コードApplySetReferencesに接続できません。しかし、ナビゲーション プロパティによる、オブジェクト グラフをクエリする一般的な方法を示すことができます。モデルでは、基本的なクエリ本体は次のようになります。

from d in Divisions
from c in d.Categories
from i in c.Items
select new { Div = d.Description, Cat = c.Description, Item = i.Description }

ここから始めて、次のような他のフィルターとプロパティを追加できます

from d in Divisions.Where(div => div.Id == id)
from c in d.Categories
from i in c.Items.Where(item => item.Date == date)
select new { ... }

または、フィルター処理されたコレクション内のアイテムを含む結果が必要な場合:

from d in Divisions.Where(div => div.Id == id)
from c in d.Categories
select new new { Div = d.Description,
                 Cat = c.Description,
                 Items = c.Items.Where(item => item.Date == date)
               }
于 2012-11-22T23:16:36.370 に答える