1

本当に基本的なLINQの質問ですが、複数のデータベーステーブルから取得したデータをどのように処理するかについて教えてもらえますか?

たとえば、Productsテーブルがある場合、DBML を使用すると、Productクエリ、更新、作成などを行うことができる素敵なオブジェクトが得られます ( Product.NameProduct.Priceなど)。すべてとても素敵です。

Productただし、他のテーブルの束に結合し、それらのテーブルから列を戻すLINQ クエリがあるとします。DB テーブルからオブジェクトへの 1:1 マッピングは不可能なので、何として返されますか?

例えば。たとえば、顧客名の組み合わせでProductあり、Customerどのようにクエリを実行するか:

object.customerName ?

デフォルトでデータセットとして返されますか?

4

5 に答える 5

2

一般に (常にではありませんが、多くの場合)、クエリがコレクションを返す匿名型を構成します。たとえば、プロパティに名前を付けると、他のタイプと同じようにアクセスできます。

于 2012-04-18T13:54:40.937 に答える
1

「匿名型」と呼ばれるものを作成します。次のように使用できます。

var x = from p in context.Products
        join o in OrderLines in p.Id = o.ItemId
        select new    // you are creating your anonymous type here
        {
            OrderId = o.Id,
            ProductName = p.Name,
            OrderDate = o.Date
        }

foreach (var y in x)
{
    Console.WriteLine("Product name: " + y.ProductName);
}
于 2012-04-18T14:01:25.330 に答える
0

通常、クエリのselect句に応じて、匿名タイプまたはカスタムオブジェクトがあります。

from p in context.Products
join //with other tables with appropriate join conditions
select new
{
   prop1 = p.ProductName,
   prop2 = p.ProductId
}

これにより、prop1とprop2の2つのプロパティを持つ匿名タイプが返されます。

from p in context.Products
join //with other tables with appropriate join conditions
select new MyProduct()
{
   prop1 = p.ProductName,
   prop2 = p.ProductId
}

これにより、MyProductというカスタムオブジェクトが返され、オブジェクト初期化子のブロックでそのプロパティを設定できます。

于 2012-04-18T14:00:54.770 に答える
0

データベースにビューを作成し、Linq-to-SQL を介してオブジェクトにマップできます。

于 2012-04-18T14:05:28.200 に答える
0

キーが適切に設定されていれば、Product.Customers などのクエリを実行できるはずです。または、2 つのテーブルを結合できます。構文は次のようになります。

from p in context.Products
join c in context.Customers on p.CId equals c.Id
于 2012-04-18T13:50:01.567 に答える