Запросы в LINQ to Entities

Экземпляры универсального класса ObjectQuery<T>, реализующего общий интерфейс IQueryable<T>, служат источником данных для запросов LINQ to Entities. Универсальный класс ObjectQuery<T> представляет запрос, который возвращает коллекцию, включающую ноль или более типизированных объектов. Можно также разрешить компилятору вывести тип сущности при помощи ключевого слова C# var (Dim в Visual Basic).

--------------------------------------------------------------------

метод Select используется для возврата всех строк из таблицы Product и отображения названий продуктов.

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

IQueryable<Product> productsQuery = from product in context.Products

select product;

Console.WriteLine("Product Names:");

foreach (var prod in productsQuery)

{ Console.WriteLine(prod.Name); }

}

------------------------------------------------------------------

метод Select для возврата последовательности, состоящей только из названий продуктов.

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

IQueryable<string> productNames =

from p in context.Products

select p.Name;

Console.WriteLine("Product Names:");

foreach (String productName in productNames)

{ Console.WriteLine(productName); }

}

---------------------------------------------------------------------------

В следующем примере используется инструкция From … From … (эквивалент метода SelectMany) для выделения всех заказов, в которых значение TotalDue меньше 500,00.

decimal totalDue = 500.00M;

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

ObjectSet<Contact> contacts = context.Contacts;

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;

var query =

from contact in contacts

from order in orders

where contact.ContactID == order.Contact.ContactID

&& order.TotalDue < totalDue

select new

{

ContactID = contact.ContactID,

LastName = contact.LastName,

FirstName = contact.FirstName,

OrderID = order.SalesOrderID,

Total = order.TotalDue

};

foreach (var smallOrder in query)

{

Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Total Due: ${4} ",

smallOrder.ContactID, smallOrder.LastName, smallOrder.FirstName,

smallOrder.OrderID, smallOrder.Total);

}

}

-------------------------------------------------------------------------------------

В следующем примере используется инструкция From … From … (эквивалент метода SelectMany) для выборки всех заказов, сделанных 1 октября 2002 г. или позже.

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

ObjectSet<Contact> contacts = context.Contacts;

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;

var query =

from contact in contacts

from order in orders

where contact.ContactID == order.Contact.ContactID

&& order.OrderDate >= new DateTime(2002, 10, 1)

select new

{

ContactID = contact.ContactID,

LastName = contact.LastName,

FirstName = contact.FirstName,

OrderID = order.SalesOrderID,

OrderDate = order.OrderDate

};

foreach (var order in query)

{

Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Order date: {4:d} ",

order.ContactID, order.LastName, order.FirstName,

order.OrderID, order.OrderDate);

}

}

----------------------------------------------------

инструкция From … From … (эквивалент метода SelectMany) для выборки всех тех заказов, в которых итоговая сумма превышает 10 000,00, и применяется присваивание From для предотвращения повторного запроса того же итога.

decimal totalDue = 10000.0M;

using (AdventureWorksEntities context = new AdventureWorksEntities())

{

ObjectSet<Contact> contacts = context.Contacts;

ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;

var query =

from contact in contacts

from order in orders

let total = order.TotalDue

where contact.ContactID == order.Contact.ContactID

&& total >= totalDue

select new

{

ContactID = contact.ContactID,

LastName = contact.LastName,

OrderID = order.SalesOrderID,

total

};



foreach (var order in query)

{

Console.WriteLine("Contact ID: {0} Last name: {1} Order ID: {2} Total: {3}",

order.ContactID, order.LastName, order.OrderID, order.total);

}

}