Ho il seguente metodo che semplicemente itera su ordini raggruppati per ID cliente.
static void LinqWithInto()
{
using (var db = new EFContext())
{
var orders = db.Orders.Include(o => o.Client);
orders.Load();
var query = from order in orders
group order by order.ClientId into g
select new { ClientId = g.Key, Count = g.Count(), Orders = g };
foreach (var group in query)
{
WriteLine($"Client Id: {group.ClientId}, Number of orders: {group.Count}");
foreach (var order in group.Orders)
WriteLine($"\tOrder Id: {order.OrderId}, Client Id: {order.Client.ClientId}, Client Name: " +
$"{order.Client.Name} Payment: {order.Payment}");
}
}
}
La query recupera gli ordini con i client associati:
[Table("Order")]
public class Order
{
public int OrderId { get; set; }
public int ClientId { get; set; }
public double Payment { get; set; }
[ForeignKey("ClientId")]
public Client Client { get; set; }
}
[Table("Client")]
public class Client
{
public int ClientId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public List<Order> Orders { get; set; }
}
Il codice funziona bene in EF6, ma in EF Core ho il seguente errore (la query variabile nel ciclo foreach è evidenziata):
System.ArgumentException: 'Espressione di tipo' System.Object 'non può essere utilizzata per parametro di tipo' Microsoft.EntityFrameworkCore.Metadata.IEntityType 'di metodo' Void StartTracking (System.Object, Microsoft.EntityFrameworkCore.Metadata.ientityType) ''
Mi chiedo cosa c'è di sbagliato qui?
Questo sembra essere un bug in EF Core 2.0 che è stato risolto in questo numero (Contiene soluzione alternativa):
https://github.com/aspnet/EntityFrameworkCore/issues/9551
È possibile ottenere il testfeed 2.0.3 qui (contiene correzione):
https://github.com/aspnet/Announcements/issues/274