Ok, so muss ich ein Dictionary aus den Ergebnissen einer Linq-Abfrage erstellen/zurückgeben. Ich habe fast alles versucht, was mir einfällt, und habe immer wieder Probleme. Hier ist, was ich gerade versuche ...C# Linq Abfrage zurückgeben Wörterbuch <int,int[]>
public static Dictionary<int,int[]> GetEntityAuthorizations(int userId)
{
using (MyDb db = new MyDb())
{
var query = db.EntityManagerRoleAssignments.Where(x => x.EntityManager.ManagerId == userId);
var entityId = query.Select(x => x.EntityManager.EntityId);
var roles = query.Select(x => x.RoleId).ToArray();
var result = query.ToDictionary(entityId, roles);
return result;
}
}
jede Hilfe würde sehr geschätzt werden. Was ich suche, um von diesem zurückgegeben zu werden, ist ein Dictionary, in dem der Schlüssel die entityId oder EntityManager.EntityId ist und die Werte ein Array von verbundenen RoleId's sind.
Derzeit bekomme ich die folgenden zwei Fehler zur Kompilierzeit, und andere Versuche waren Fehler ähnlich, aber nicht genau zu diesen.
Error 11 Die Typargumente für die Methode ‚System.Linq.Enumerable.ToDictionary < TSource, TKey> (System.Collections.Generic.IEnumerable, System.Func < TSource, TKey>, System.Collections.Generic. IEqualityComparer < TKey>) 'kann nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.
Fehler 12 kann nicht implizit konvertiert Typ 'System.Collections.Generic.Dictionary < TKey, Sqor.Database.DbEntityManagerRoleAssignment>' auf 'System.Collections.Generic.Dictionary < int, int []>'
UPDATE - Arbeitslösung (Danke Stanley @D)
public static Dictionary<int,int[]> GetEntityAuthorizations(int userId)
{
using (SqorDb db = new SqorDb())
{
var query = db.EntityManagerRoleAssignments.Where(x => x.EntityManager.ManagerId == userId);
var entityGroups = query.GroupBy(x => x.EntityManager.EntityId);
var result = entityGroups.ToDictionary(e => e.Key,
g => g.Select(x => x.RoleId).ToArray()
);
return result;
}
}
Was macht es im Vergleich zu dem, was Sie tun wollen? – Adam
Warum möchten Sie ein Wörterbuch mit einem einzigen Paar? Die Methode verwendet eine einzelne Benutzer-ID, sodass dieses Wörterbuch nicht mehr als ein Schlüsselwertpaar enthält. Lassen Sie es ein 'int []' zurückgeben. –
Ihr Recht, ich habe meinen Code bearbeitet, um besser anzuzeigen, was ich ... – haltandcode