2

私は次のようなモデルを持っています:

public class Customer
{
    public int Id { get; set; }

    public string Name { get; set; }

    public ICollection<Order> Orders { get; set; }
}

public class Order
{
    public int Id { get; set; }

    public DateTime DateTime { get; set; }

    public Customer Customer { get; set; }

    public ICollection<OrderLine> OrderLines { get; set; }
}

public class OrderLine
{
    public int Id { get; set; }

    public Product Product { get; set; }

    public int Price { get; set; }

    public int Quantity { get; set; }
}

public class Product
{
    public int Id { get; set; }

    public string Name { get; set; }

    public Category Category { get; set; }
}

public class Category
{
    public int Id { get; set; }

    public string Name { get; set; }
}

私はこのインフラストラクチャを使用しています。

私の総体的なルーツは、顧客、注文、製品です。マッピングは単純なので、ここには含めませんでした。

var customers = unitOfWork.Customers.FindAll();
var orders = unitOfWork.Orders.FindAll();
var products = unitOfWork.Products.FindAll();

var query = ......

LINQを使用して、「飲料」カテゴリの製品を注文したすべての顧客をどのように選択しますか?

私がWebで見たすべてのサンプルは、非常に基本的なクエリであり、高度なものではありません。

4

2 に答える 2

1

http://msdn.microsoft.com/en-us/vbasic/bb737909 を見つけました

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

from c in unitOfWork.Customers
join o in unitOfWork.Orders on o.Customer = c
join ol in unitOfWork.OrderLines on ol.Order = o
where ol.Product.Category.Name == "Beverages"
select c

そして、すべてのparent-object-propertiesを追加する必要があります

于 2011-02-17T11:20:38.340 に答える
0

これはうまくいくかもしれません:

from customer in customers
where customer.Orders.Any(
      o => o.OrderLines.Any(l => l.Product.Category.Name == "Beverages")
select customer

(製品とカテゴリの関係を忘れていると思います)

于 2011-02-17T11:28:41.747 に答える