Ich habe dies ein wenig vereinfacht, weil ich eine allgemeine Antwort suche. Lassen Sie uns sagen, dass ich eine Tabelle Setup wie diese haben:Linq. Enthält mit großem Satz verursacht TDS-Fehler
Parent
recno int (unique, pk)
date datetime
stuff varchar(50)
Child
parentrecno (int, fk) --- PK
sequence (int) --- PK
data varchar(50)
Und in meinem C# Programm habe ich durch eine Menge Ärger gegangen, um die übergeordneten Datensätze zu finden, die mich interessieren und stopfen sie in eine Liste . Parent ist eine wirklich große Tabelle, und ich würde sie lieber nicht mehr als nötig abfragen. So Eichhörnchen ich die Schlüssel weg:
List<int> recs = (from d in Parent where [.....] select d.recno).ToList();
Später in Linq kann ich sagen, alle untergeordneten Datensätze für die zugehörigen Eltern finden:
var kids = from k in database.Childs
where recs.Contains(k.parentrecno)
select new { k };
Das ist alles groß, bis recs mehr als 2100 enthält Einträge. Dann bekomme ich einen TDS RPC Fehler (zu viele Parameter).
So wie ich es sehe ich kann:
Sie das Ganze in gerade nach oben SQL (wollte nicht wirklich mit einem Datareader den Streit gehen durch, etc ...). Es gab ein externes System bei der Qualifizierung der Aufzeichnungen, also weiß ich nicht, ob das auch möglich ist. Außerdem würde ich diese Liste zweimal erstellen - einmal, wenn ich sie in .Contains() verwenden muss, und wieder für andere Zwecke.
Brechen Sie die Liste (recs) auf, und lesen Sie Child in Chunks.
Wenn ich es brechen in Stücke, dann meine ziemlich Linq ein wenig weiter nach unten wird nicht funktionieren:
var kids2 = (from kid in paydb.Childs
where
recs.Contains(kid.parentrecno)
group pay by kid.parentrecno into kgroup
select new { ParentRecNo = kgroup.Key, KidRecords = kgroup })
.ToDictionary(kx => kx.ParentRecNo);
Da die Liste recs Dinge enthalten, die zusammen werden mussten gruppiert , aber notwendigerweise getrennt für die Linq-Abfrage.
sieht das wie die einzige Lösung aus, die tatsächlich funktioniert –
John, können Sie bitte einige Beispiele Ihrer Lösung bereitstellen. –