Сообщение Linq EF и коррелирующие запросы от 27.08.2015 9:15
Изменено 27.08.2015 9:28 Serginio1
Добрый всем день. Наконец дошли руки и до Linq.
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
Так вот Периодические возвращается
System.Data.Entity.Core.Common.Internal.Materialization.CompensatingCollection<<>f__AnonymousType0<string,System.DateTime>>
Пока писал уже нашел решение FirstOrDefault()
Интересно, что генерится такой запрос
Вопрос такой как создать обобщенную функцию.
в 1С есть поля неопределенного справочника где есть тип и ид
var db = Константы1С.ГлобальныйКонтекст.db;
var query2 = from спр in db.Спр_Номенклатура
where спр.ID=ID
select спр;
return query2.SingleOrDefault();
То есть хотелосбы обощенную функцию Типа
Чтобы получив тип вызвать обобщенную функцию.
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
var бд = Константы1С.ГлобальныйКонтекст.db;
var query = from Константа in бд.ТаблицаКонстанты
where Константа.ID == 9697
orderby Константа.DATE descending, Константа.TIME descending, Константа.DOCID descending, Константа.ROW_ID descending
select Константа;
// select new Константы1С.ЗначениеПериодического { Значение = Константа.VALUE }).Take(1);
var query2= (from спр in бд.Спр_ДляПериодических
select new
{
Наименование=спр.Наименование,
ДатаСпр=спр.ДатаСпр,
Периодические=(from прериод in query.Where(ю=> ю.OBJID==спр.ID && ю.DATE<=спр.ДатаСпр).Take(1)
select new
{
Значение=прериод.VALUE,
Дата=прериод.DATE
}).FirstOrDefault()
}
);
foreach (var элем in query2)
{
Console.WriteLine("{0}.{1} - {2}", элем.Наименование, элем.ДатаСпр, элем.Периодические);
}
Так вот Периодические возвращается
System.Data.Entity.Core.Common.Internal.Materialization.CompensatingCollection<<>f__AnonymousType0<string,System.DateTime>>
Пока писал уже нашел решение FirstOrDefault()
Интересно, что генерится такой запрос
SELECT
1 AS [C1],
[Extent1].[DESCR] AS [DESCR],
[Extent1].[SP9700] AS [SP9700],
[Limit1].[ROW_ID] AS [ROW_ID],
[Limit1].[VALUE] AS [VALUE],
[Limit1].[DATE] AS [DATE]
FROM [dbo].[SC9691] AS [Extent1]
OUTER APPLY (SELECT TOP (1) [Project1].[ROW_ID] AS [ROW_ID], [Project1].[DATE] AS [DATE], [Project1].[VALUE] AS [VALUE]
FROM ( SELECT
[Extent2].[ROW_ID] AS [ROW_ID],
[Extent2].[DATE] AS [DATE],
[Extent2].[VALUE] AS [VALUE],
[Extent2].[DOCID] AS [DOCID],
[Extent2].[TIME] AS [TIME]
FROM [dbo].[_1SCONST] AS [Extent2]
WHERE (9697 = [Extent2].[ID]) AND ([Extent2].[OBJID] = [Extent1].[ID]) AND ([Extent2].[DATE] <= [Extent1].[SP9700])
) AS [Project1]
ORDER BY [Project1].[DATE] DESC, [Project1].[TIME] DESC, [Project1].[DOCID] DESC, [Project1].[ROW_ID] DESC ) AS [Limit1]
Вопрос такой как создать обобщенную функцию.
в 1С есть поля неопределенного справочника где есть тип и ид
var db = Константы1С.ГлобальныйКонтекст.db;
var query2 = from спр in db.Спр_Номенклатура
where спр.ID=ID
select спр;
return query2.SingleOrDefault();
То есть хотелосбы обощенную функцию Типа
public static T ПолучитьЭлементСправочника<T>(string ID)
{
var query2 = from спр in Model1.DbSet<T>
where спр.ID=ID
select спр;
return query2.SingleOrDefault<T>();
}
Чтобы получив тип вызвать обобщенную функцию.
Добрый всем день. Наконец дошли руки и до Linq.
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
Так вот Периодические возвращается
System.Data.Entity.Core.Common.Internal.Materialization.CompensatingCollection<<>f__AnonymousType0<string,System.DateTime>>
Пока писал уже нашел решение FirstOrDefault()
Интересно, что генерится такой запрос
Вопрос такой как создать обобщенную функцию.
в 1С есть поля неопределенного справочника где есть тип и ид
var db = Константы1С.ГлобальныйКонтекст.db;
var query2 = from спр in db.Спр_Номенклатура
where спр.ID=ID
select спр;
return query2.SingleOrDefault();
То есть хотелосбы обощенную функцию Типа
Чтобы получив тип вызвать обобщенную функцию.
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
var бд = Константы1С.ГлобальныйКонтекст.db;
var query = from Константа in бд.ТаблицаКонстанты
where Константа.ID == 9697
orderby Константа.DATE descending, Константа.TIME descending, Константа.DOCID descending, Константа.ROW_ID descending
select Константа;
// select new Константы1С.ЗначениеПериодического { Значение = Константа.VALUE }).Take(1);
var query2= (from спр in бд.Спр_ДляПериодических
select new
{
Наименование=спр.Наименование,
ДатаСпр=спр.ДатаСпр,
Периодические=(from прериод in query.Where(ю=> ю.OBJID==спр.ID && ю.DATE<=спр.ДатаСпр).Take(1)
select new
{
Значение=прериод.VALUE,
Дата=прериод.DATE
}).FirstOrDefault()
}
);
foreach (var элем in query2)
{
Console.WriteLine("{0}.{1} - {2}", элем.Наименование, элем.ДатаСпр, элем.Периодические);
}
Так вот Периодические возвращается
System.Data.Entity.Core.Common.Internal.Materialization.CompensatingCollection<<>f__AnonymousType0<string,System.DateTime>>
Пока писал уже нашел решение FirstOrDefault()
Интересно, что генерится такой запрос
SELECT
1 AS [C1],
[Extent1].[DESCR] AS [DESCR],
[Extent1].[SP9700] AS [SP9700],
[Limit1].[ROW_ID] AS [ROW_ID],
[Limit1].[VALUE] AS [VALUE],
[Limit1].[DATE] AS [DATE]
FROM [dbo].[SC9691] AS [Extent1]
OUTER APPLY (SELECT TOP (1) [Project1].[ROW_ID] AS [ROW_ID], [Project1].[DATE] AS [DATE], [Project1].[VALUE] AS [VALUE]
FROM ( SELECT
[Extent2].[ROW_ID] AS [ROW_ID],
[Extent2].[DATE] AS [DATE],
[Extent2].[VALUE] AS [VALUE],
[Extent2].[DOCID] AS [DOCID],
[Extent2].[TIME] AS [TIME]
FROM [dbo].[_1SCONST] AS [Extent2]
WHERE (9697 = [Extent2].[ID]) AND ([Extent2].[OBJID] = [Extent1].[ID]) AND ([Extent2].[DATE] <= [Extent1].[SP9700])
) AS [Project1]
ORDER BY [Project1].[DATE] DESC, [Project1].[TIME] DESC, [Project1].[DOCID] DESC, [Project1].[ROW_ID] DESC ) AS [Limit1]
Вопрос такой как создать обобщенную функцию.
в 1С есть поля неопределенного справочника где есть тип и ид
var db = Константы1С.ГлобальныйКонтекст.db;
var query2 = from спр in db.Спр_Номенклатура
where спр.ID=ID
select спр;
return query2.SingleOrDefault();
То есть хотелосбы обощенную функцию Типа
public static T ПолучитьЭлементСправочника<T>(string ID)
{
var query2 = from спр in db.Set<T>()
where спр.ID=ID
select спр;
return query2.SingleOrDefault<T>();
}
Чтобы получив тип вызвать обобщенную функцию.