1

linq to sql を使用して、Customers という名前の親エンティティで単純な選択を実行しようとしています。これは、私の dbml デザイナーで Projects というエンティティに対して 1 対多の関係を持っています。

結合を使用すると、両方のエンティティの列のプロパティにアクセスできます。

using (DataClasses1DataContext DbContext = new DataClasses1DataContext())
            {
                var query2 = DbContext.Customers
                    .Join(DbContext.Projects, c => c.CustomerID, p => p.CustomerID,
                    (c, p) => new
                    {
                        c.Email,
                        p.Customer
                    });
            }

ただし、単純な選択 (query1、2、または 3 変数のいずれかを使用) では、遅延読み込みで Projects エンティティの列プロパティが表示されない理由がわかりません (インテリセンスを使用)。query1 と query2 はリストを返し、query3 は 1 つのレコードのみを返すことがわかっています。

遅延読み込みを適切に使用し、Project 子エンティティの列プロパティにアクセスするにはどうすればよいですか?

また、Lazy または Eager ローディングで同じ子列にアクセスできるのに、関連するエンティティで JOIN を使用するのはなぜですか?

using (DataClasses1DataContext DbContext = new DataClasses1DataContext())
            {
                //var dataLoadOptions = new DataLoadOptions();
                //DbContext.LoadOptions.LoadWith<Customer>(n => n.Projects);

                //var query1 = DbContext.Customers.Where(c => c.CustomerID > 0);

                //var query2 = DbContext.Customers.Where(c => c.CustomerID > 0).Select(c => new { c.CustomerID, c.Projects });

                var query3 = DbContext.Customers.Where(c => c.CustomerID == 1).FirstOrDefault();

                query3.Projects.
            }

編集 #1: var query1 = DbContext.Customers.Where(c => c.CustomerID > 0);

            foreach (var c in query1)
            {
                c.Projects.
            }
4

1 に答える 1

1

単一のオブジェクトはCustomerですが、Projectsは単一のProjectオブジェクトではなくコレクションです。

アップデート

var query1 = DbContext.Customers.Where(c => c.CustomerID > 0);

foreach (var c in query1)
{
    foreach(var p in c.Projects)
    {
         int id = p.CustomerID;
         ...
    }
}
于 2013-03-10T19:31:45.560 に答える