Linq-to-SQL - 多个表

时间:2012-04-18 13:35:29

标签: c# sql linq linq-to-sql multiple-tables

真正基本的LINQ问题,但有人可以告诉我它是如何从多个数据库表中处理数据的。

例如,如果您有一个Products表,那么使用DBML可以获得一个很好的Product对象,您可以查询,更新,创建等等。(Product.Name,{{1}所有非常好。

但是,如果我有一个LINQ查询在一堆其他表上加入Product.Price并将这些表中的列带回来。 DB表与对象之间没有1:1的映射,那么返回的是什么?

EG。如果它是ProductProduct的组合,我将如何查询,例如,客户名称:

Customer

默认情况下是否作为数据集返回?

5 个答案:

答案 0 :(得分:2)

您通常会(通常,但并非总是如此)构成您的查询将返回其集合的匿名类型。您可以为这些属性命名,然后可以像使用任何其他类型一样访问它们。

答案 1 :(得分: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);
}

答案 2 :(得分:0)

如果您的密钥设置正确,您应该能够进行Product.Customers等查询或其他方式。或者你可以加入两个表,语法类似于:

from p in context.Products
join c in context.Customers on p.CId equals c.Id

答案 3 :(得分:0)

您通常会拥有匿名类型或自定义对象,具体取决于查询的select子句

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

这将返回一个匿名类型,其中包含2个属性prop1& PROP2

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

这将返回名为MyProduct&的自定义对象。您可以在对象初始值设定项的块中设置其属性

答案 4 :(得分:0)

您可以在数据库中创建一个View,并通过Linq-to-SQL映射到Object。