Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan bestämma dig för att köra dina frågor antingen via fjärranslutning (dvs. databasmotorn kör frågan mot databasen) eller lokalt (LINQ till SQL kör frågan mot en lokal cache).
Fjärrkörning
Överväg följande fråga:
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
Om databasen har tusentals rader med beställningar vill du inte hämta dem alla för att bearbeta en liten delmängd. I LINQ till SQL implementerar EntitySet<TEntity>-klassen IQueryable-gränssnittet. Den här metoden ser till att sådana frågor kan köras via fjärranslutning. Två viktiga fördelar med den här tekniken:
Onödiga data hämtas inte.
En fråga som körs av databasmotorn är ofta effektivare på grund av databasindexen.
Lokal exekvering
I andra situationer kanske du vill ha en fullständig uppsättning relaterade entiteter i det lokala cacheminnet. För detta ändamål tillhandahåller EntitySet<TEntity> metoden Load för att uttryckligen läsa in alla medlemmar i EntitySet<TEntity>.
Om en EntitySet<TEntity> redan har lästs in körs efterföljande frågor lokalt. Den här metoden hjälper på två sätt:
Om den fullständiga uppsättningen måste användas lokalt eller flera gånger kan du undvika fjärrfrågor och tillhörande svarstider.
Entiteten kan serialiseras som en fullständig entitet.
Följande kodfragment illustrerar hur lokal körning kan exekveras:
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
Jämförelse
Dessa två funktioner ger en kraftfull kombination av alternativ: fjärrkörning för stora samlingar och lokal körning för små samlingar eller där hela samlingen behövs. Du implementerar fjärrkörning via IQueryable, och lokal körning mot en minnesintern IEnumerable<T> samling. Information om hur du framtvingar lokal körning (dvs. IEnumerable<T>) finns i Konvertera en typ till en generisk IEnumerable.
Frågor mot osorterade uppsättningar
Observera den viktiga skillnaden mellan en lokal samling som implementerar List<T> och en samling som tillhandahåller fjärrfrågor som körs mot osorterade uppsättningar i en relationsdatabas. List<T> metoder som de som använder indexvärden kräver listsemantik, som vanligtvis inte kan hämtas via en fjärrfråga mot en osorterad uppsättning. Av den anledningen läser sådana metoder in EntitySet<TEntity> implicit för att tillåta körning lokalt.