Megosztás a következőn keresztül:


Távoli és helyi végrehajtás

Dönthet úgy, hogy távolról hajtja végre a lekérdezéseket (vagyis az adatbázismotor végrehajtja a lekérdezést az adatbázison) vagy helyileg (az SQL LINQ-jának használatával a lekérdezést helyi gyorsítótárban hajtja végre).

Távoli végrehajtás

Fontolja meg a következő lekérdezést:

            Northwnd db = new Northwnd(@"northwnd.mdf");
            Customer c = db.Customers.Single(x => x.CustomerID == "19283");
foreach (Order ord in
    c.Orders.Where(o => o.ShippedDate.Value.Year == 1998))
{
    // Do something.
}
    Dim db As New Northwnd("c:\northwnd.mdf")
    Dim c As Customer = _
(From cust In db.Customers _
 Where cust.CustomerID = 19283).First()
    Dim orders = From ord In c.Orders _
                 Where ord.ShippedDate.Value.Year = 1998
    For Each nextOrder In orders
        ' Do something.
    Next

Ha az adatbázis több ezer sornyi megrendeléssel rendelkezik, nem szeretné lekérni őket egy kis részhalmaz feldolgozásához. A LINQ-ban az SQL-ben az EntitySet<TEntity> osztály implementálja az interfészt IQueryable . Ez a módszer biztosítja, hogy az ilyen lekérdezések távolról is végrehajthatók legyenek. Ennek a technikának két fő előnye van:

  • A szükségtelen adatok lekérése nem történik meg.

  • Az adatbázismotor által végrehajtott lekérdezések gyakran hatékonyabbak az adatbázisindexek miatt.

Helyi végrehajtás

Más helyzetekben előfordulhat, hogy a kapcsolódó entitások teljes készletét a helyi gyorsítótárban szeretné használni. Ebből a célból megadja a metódustLoad, EntitySet<TEntity> hogy explicit módon betöltse a EntitySet<TEntity>.

Ha egy EntitySet<TEntity> már be van töltve, a rendszer helyileg hajtja végre a további lekérdezéseket. Ez a megközelítés kétféleképpen segít:

  • Ha a teljes készletet helyileg vagy többször kell használni, elkerülheti a távoli lekérdezéseket és a kapcsolódó késéseket.

  • Az entitás szerializálható teljes entitásként.

Az alábbi kódrészlet bemutatja, hogyan szerezhető be a helyi végrehajtás:

            Northwnd db = new Northwnd(@"northwnd.mdf");
            Customer c = db.Customers.Single(x => x.CustomerID == "19283");
c.Orders.Load();

foreach (Order ord in
    c.Orders.Where(o => o.ShippedDate.Value.Year == 1998))
{
    // Do something.
}
        }
    Dim db As New Northwnd("c:\northwnd.mdf")
    Dim c As Customer = _
(From cust In db.Customers _
 Where cust.CustomerID = 19283).First
    c.Orders.Load()

    Dim orders = From ord In c.Orders _
                 Where ord.ShippedDate.Value.Year = 1998

    For Each nextOrder In orders
        ' Do something.
    Next

Összehasonlítás

Ez a két lehetőség a lehetőségek hatékony kombinációját nyújtja: távoli végrehajtás nagy gyűjteményekhez és helyi végrehajtás kis gyűjteményekhez, vagy ahol a teljes gyűjteményre szükség van. Távoli végrehajtást hajthat végre egy memórián IEnumerable<T> belüli gyűjteményen keresztül IQueryableés helyi végrehajtással. A helyi végrehajtás kényszerítéséhez (azaz IEnumerable<T>) lásd : Típus átalakítása általános IEnumerable-vé.

Lekérdezések rendezetlen készletek ellen

Figyelje meg a megvalósítandó List<T> helyi gyűjtemény és a relációs adatbázisban lévő rendezetlen csoportokon végrehajtott távoli lekérdezéseket biztosító gyűjtemény közötti fontos különbséget. List<T> Az indexértékeket használó metódusokhoz listaszemantika szükséges, amely általában nem kérhető le távoli lekérdezéssel rendezetlen halmazon keresztül. Ezért az ilyen metódusok implicit módon töltik be a EntitySet<TEntity> helyi végrehajtás engedélyezéséhez.

Lásd még