1

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

例如,如果你有一个Products表,那么使用 DBML 你会得到一个很好的Product对象,你可以查询、更新、创建等。(Product.Name等等Product.Price)一切都很好。

但是,如果我有一个 LINQ 查询,它连接Product了一堆其他表并将这些表中的列带回。数据库表到对象的 1:1 映射是不可能的,那么它返回的是什么?

例如。如果它是一个组合,ProductCustomer将如何查询,例如,客户名称:

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

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

from p in context.Products
join c in context.Customers on p.CId equals c.Id
于 2012-04-18T13:50:01.567 回答
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 的自定义对象,您可以在对象初始化程序的块中设置其属性

于 2012-04-18T14:00:54.770 回答
0

您可以在数据库中创建视图,并通过 Linq-to-SQL 映射到对象。

于 2012-04-18T14:05:28.200 回答