У меня есть запрос:
SELECT TOP 50 CONVERT(date, o.OrderDate)as OrderDate,ISNULL(rd.SerialNumbers,'') as SerialNumbers,CAST(o.SourceOrderID as varchar(50)) as SourceOrderNumber
From Orders o
Запрос редактируется для вопроса.
var lq= (
from o in db.Orders
select new {,o.Name, o.Company, o.Address, o.Address2, o.City, o.State, o.Country, o.Email, o.Zip, o.Phone, o.ShipName, o.ShipCompany, o.ShipAddress, o.ShipAddress2, o.ShipCity, o.ShipCountry, o.ShipState, o.ShipPhone, o.ShipZip, o.OrderNumber, o.ShippingTotal }
).ToList();
Я могу сделать простые объединения и выбрать в LINQ, но не получить представление о том, как получить выборки, подобные упомянутым в запросе.
Я использую EF
Поскольку нет способа фактически выполнить преобразование string
в datetime
как часть запроса БД с использованием LINQ, рекомендуется использовать AsEnumerable
для переключения контекста списка для запуска фактического преобразования в память
orders.Take(50)
.AsEnumerable()
.Select(x => new {
OrderDate = x.OrderDate.Date,
SerialNumbers = o.SerialNumbers ?? "",
SourceOrderNumber = o.SourceOrderID.ToString()
});
Select
чтобы не вытягивать все из базы данных. (И да, поместите Take
перед AsEnumerable
, иначе вы извлекаете записи «кто знает сколько» ...)
orders.OrderBy().Take(50).AsEnumerable()...
LINQ2SQL на самом деле достаточно яркий, чтобы обрабатывать синтаксический анализ в коде:
var q = from c in Customers
where c.PhoneNumber == "9075556658"
select new
{
SSN = c.SSN,
DOB = DateTime.Parse(c.BirthDate)
};
q.Dump();
Я просто запустил это в LinqPad в моей собственной базе данных, и он работал нормально.
ПРИМЕЧАНИЕ. Это было протестировано с Linq2SQL, а не с платформой Entity Framework, которая не может делать то, что Linq2SQL делает в течение многих лет.