0

こんにちは、

私は典型的な例を取り上げます。私はCustomerテーブルとPurchaseテーブルを持っており、顧客はいくつかの注文をすることができます。

ファイルを作成し、DBML「サーバーエクスプローラーウィンドウ」の両方のテーブルからDBMLエディターにドロップすると、2つのエンティティが生成されますCustomersPurchases

私はいくつかのオブジェクトを持っています:

public interface IMyCustomer
{
    int Id { get; set; }
    string Code { get; set; }
    string Firstname { get; set; }
    string Lastname { get; set; }
    List<IMyPurchase> Purchases { get; set; }
}

public class MyCustomer : IMyCustomer
{
    public int Id { get; set; }
    public string Code { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public List<IMyPurchase> Orders { get; set; }
}

public interface IMyPurchase
{
    int Id { get; set; }
    string Code { get; set; }
    DateTime CreationDate { get; set; }
}

public class MyPurchase : IMyPurchase
{
    public int Id { get; set; }
    public string Code { get; set; }
    public DateTime CreationDate { get; set; }
}

var result = 
    from customer in _dataContext.Customers
    join order in _dataContext.Purchases on customer.Id equals order.IdCustomer
    select new MyCustomer
    {
        Code = customer.Code,
        Firstname = customer.Firstname,
        Lastname = customer.Lastname,
        Id = customer.Id,
        Purchases = _dataContext.Purchases
            .Select(x => x.IdCustomer == customer.Id)
            .Cast<IMyPurchase>()
            .ToList<IMyPurchase>()
    };

linqクエリは機能します。結果のエントリについては、に関するすべての情報があります。customer正しい行数がありPurchasesますが、の各エントリの各プロパティPurchasesはnullです。Customer情報とすべてをロードしたいpurchase

何か案が ?

ありがとう、

4

2 に答える 2

0

ここにサンプルがあります。購入の顧客 ID はどこにありますか

    var items = (from p in _dataContext.Purchases
                 join c in _dataContext.Customers
                 on p.CustomerID equals c.ID
                 where (c.ID == customerId)
                 orderby p.CreationDate descending
                 select new { p, c });

foreach (var data in items)
{
    // do stuff
    int customerId = data.c.ID;
    int purchaseId = data.p.ID;
    // you can acces all properties of both objects
}
于 2012-07-04T06:33:31.960 に答える
0

Purchaseと の間に変換ロジックがないようですMyPurchase

また、Cast<>()メソッドは暗黙的なキャストを使用しようとしますが、Linq-to-SQL エンティティがそのインターフェイスを実装しない限り、その方法でキャストすることはできません。

私の提案は、AutoMapperのようなものを使用するか、linq ステートメントに翻訳ロジックを追加することです (で行っていることと同様MyCustomer)。何かのようなもの:

var result = 
    from customer in _dataContext.Customers
    join order in _dataContext.Purchases on customer.Id equals order.IdCustomer
    select new MyCustomer
    {
        Code = customer.Code,
        Firstname = customer.Firstname,
        Lastname = customer.Lastname,
        Id = customer.Id,
        Purchases = _dataContext.Purchases
            .Where(x => x.IdCustomer == customer.Id)
            .Select(x => new MyPurchase {
                Id = x.Id,
                Code = x.Code,
                CreationDate = x.CreationDate
            }).ToList();
    };
于 2012-07-04T06:32:15.920 に答える