5

これを理解しようとしているエンティティへのlinqの新機能。次のテーブルがあります。

Customer: Cust_Id, Name

Orders: Order_Id

CustomerOrders: Cust_Id, Order_Id

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

public class Customers
{
public List<Row> Rows { get; set; }

public Customers()
    {
        Rows = new List<Row>();
    }

    
    public class Row
    {
       public int Key { get; set; }
       public string Name { get; set; }
       public List<string> Order_Ids { get; set; }
    }
}

Linq クエリは次のようになります。

var query = from c in context.Customer
select new Customers.Row
{
    Key = c.Cust_Id,
    Name = c.Name,
    Order_IDs = List<string>( ?? )
};

foreach (var row in query)
{
    Customers.Rows.Add(row);
}

var serializer = new JavaScriptSerializer();
return serializer.Serialize(Customers);

「??」がある場所で、サブクエリなどを使用してテーブルOrder_Idから のリストを取得できますか? CustomerOrders今のところ、Customersテーブルがいっぱいになったらテーブルをループしてから、DB に再度クエリを実行して、Order Id各顧客の の各配列を取得することしか考えられません。

4

2 に答える 2

3

次のようなものを試してください。

var query = from c in context.Customer
select new Customers.Row
{
    Key = c.Cust_Id,
    Name = c.Name,
    Order_Ids = c.Rows.Select(row => row.Key.ToString()).ToList()
};

.Select(row => row.Key.ToString())必要なプロパティ(キー、名前など)を設定できます。Selectメソッドはへの拡張メソッドでIEnumerableあり、設定したプロパティのタイプのコレクション、この場合はToString() メソッドで変換したため文字列のコレクションを返します。

于 2012-12-10T22:08:59.337 に答える
3

要件でない場合は、「Customer」オブジェクトから「Row」コレクションを削除します。これで十分です:

public class Customer
{
    public int Key { get; set; }
    public string Name { get; set; }
    public List<string> Order_Ids { get; set; }
}

次に、次のようにクエリできます。

var customers = from c in context.Customers
                select new Customer
                {
                    Key = c.Cust_Id,
                    Name = c.Name,
                    Order_IDs = c.Orders.Select(o => o.Order_Id).ToList()
                };

テーブルと行の観点から扱うよりも、C#を記述してEFを使用するときにオブジェクトを扱う方が、混乱が少なくなります。

于 2012-12-10T22:21:41.417 に答える