私は、Entity Frameworkのにかなり新しいよ、私のテーブルの関係は少しこのEFコア関係クエリ
public class Customer {
public int Id { get; set; }
public string Name { get; set; }
public List<Product> Products { get; set; }
}
public class Product {
public int Id { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}
のように見える私はCustomerテーブルにクエリをしたいとMAX作成しただけで、最後の製品が含まれます(同上)
通常のSQLクエリは
...私の現在のEFのクエリは次のようになりますが、それはすべての製品を返すこのSELECT *
FROM Customer
INNER JOIN Product ON Customer.Id = Product.CustomerId
WHERE Product.Id = (SELECT MAX(Id) FROM Product WHERE CustomerId = Customers.Id)
ようになります。
List<Customer> customers = _context.Customers
.Include(c => c.Products)
.ToList();
私は私の右の結果が得られ、このような何かを試してみましたが、EFは、クエリの束を作り、非常に迅速に、私はこれは私がいくつかをしたいと思い、それ
List<Customer> customers = _context.Customers
.Select(c => new Customer() {
Id = c.Id,
Name = c.Name,
c.Products = c.Products.Where(d => d.Id == c.Products.Max(max => max.Id)).ToList()
}).ToList();
で行くことに間違った方法のように思える見ます提案、またはこれを行うための別の方法がある場合は、
ああ、あなたは私の結合を正しく使う方法を教えてくれました!私はOrderByDescending()で望みの結果を得ることができませんでしたが、私は.Where(c => cpId == c.cu.Product.Max(max => max.Id))に置き換えました。今、EFは私が望んでいたクエリを生成します!ありがとう – Marc