2012-03-29 14 views
1

ich nächsten Code bekam:Objekt zu Dictionary-Wert in LINQ hinzufügen?

private Dictionary<int?, byte[]> GetAllLocalScanFiles() 
{ 
    using (DZine_IStylingEntities ctxLocal = new DZine_IStylingEntities()) 
    { 
     _scanDictionaryLocal = ctxLocal.tblScan 
       .Select(s => new { s.MEMBERID, s.scanFileAvatar }) 
       .AsParallel() 
       .ToDictionary(s => s.MEMBERID, s => s.scanFileAvatar); 
    } 
    return _scanDictionaryLocal; 
} 

Ich mag Dictionary<int?, ScanClass>

ScanClass die Ditionary ändern, ist ein Objekt

public class ScanClass 
{ 
    public byte[] ScanFileAvatar { get; set; } 
    public byte[] Hair { get; set; } 
} 

Ist es möglich, ein Objekt für den Wert eines Dictionary zu geben ? PS Ich möchte dies nicht mit einem Nachschlagen tun.

Vielen Dank im Voraus!

Antwort

4

Klingt wie Sie wahrscheinlich etwas wie wünschen:

private Dictionary<int?, ScanClass> GetAllLocalScanFiles() 
{ 
    using (DZine_IStylingEntities ctxLocal = new DZine_IStylingEntities()) 
    { 
     return ctxLocal.tblScan 
       .Select(s => new { s.MEMBERID, s.scanFileAvatar, s.hair }) 
       .AsParallel() 
       .ToDictionary(s => s.MEMBERID, s => new ScanClass { 
            hair = s.hair, 
            scanFileAvatar = s.scanFileAvatar 
           }); 
    } 
} 

das ist vorausgesetzt, Sie haben eine hair Eigenschaft in Ihrer ursprünglichen Einheit. Es ist nicht klar, dass AsParallel Ihnen hier wirklich helfen wird. Sie sollten stattdessen die Verwendung von AsEnumerable() in Erwägung ziehen, es sei denn, Sie haben einen Grund, um dies zu parallelisieren.

+0

Jon schnelle Frage Haar & ScanFileAvatar sind 2 große Daten Prop von 20MB + und wenn ich diese Abfrage ausführen bekomme ich eine nicht genügend Speicher Ausnahme wie Ich vermeide oder behebe das? – dg90

+0

@daageu: Vermutlich nicht versuchen, das ganze enthält der Datenbank auf einmal zu holen ... es gibt nicht wirklich genug Informationen darüber, was Sie versuchen, um eine bessere Antwort zu geben ... –

1
_scanDictionaryLocal = ctxLocal.tblScan 
    .ToDictionary(s => s.MEMBERID, s => new ScanClass() 
    { 
     ScanFileAvatar = s.scanFileAvatar, 
     Hair = s.hair 
    }); 
+0

Ich würde nur die 'Select' und' AsParallel' überspringen und 'ToDictionary' direkt – Magnus

Verwandte Themen