/ / Sú spúšťané dopyty LinQ spustené v poradí alebo ako kompilácia všetkých čakajúcich akcií - c #, linq

LinQ spúšťa dopyty spustené v poradí alebo ako kompilácia všetkých čakajúcich akcií - c #, linq

var results = from r in resultTable
select r;

results = from results
where r.name == "somename"
select r;

results = results.ToList();

Keď sa vykoná funkcia ToList, Linq vyberie všetkovýsledky, potom iterujte cez všetky výsledky 2. testovanie času pre Predikát Kde? Alebo bude LinQ kombinovať Kde s prvým Vybrať a opakovať len raz?

odpovede:

3 pre odpoveď č. 1

Možno to bude prvý spôsob, akým sa pýtate alebo druhý, v závislosti od určitých okolností.

Napríklad, ak je váš dopyt preložený do databázy (a vyberiete si z IQueryable), potom sa s najväčšou pravdepodobnosťou obe vaše zadania spoja do jedného. Ak je zdroj typu IEnumerable, potom to bude jednoducho opakovať cez všetky použité výsledky kde stav.

V obidvoch prípadoch LinQ zopakuje zbierku dvakrát. Je navrhnutý opakovať sekvencie iba raz.

Jediný spôsob, ako "opakovať" dvakrát, je vykonať dotaz dvakrát, čo sa dá napríklad uskutočniť volaním ToList alebo spustené foreach.