Сообщение Linq EF и коррелирующие запросы от 27.08.2015 9:15
Изменено 27.08.2015 9:39 Serginio1
Добрый всем день. Наконец дошли руки и до Linq.
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
Так вот Периодические возвращается
System.Data.Entity.Core.Common.Internal.Materialization.CompensatingCollection<<>f__AnonymousType0<string,System.DateTime>>
Пока писал уже нашел решение FirstOrDefault()
Интересно, что генерится такой запрос
Вопрос такой как создать обобщенную функцию.
в 1С есть поля неопределенного справочника где есть тип и ид
То есть хотелосбы обощенную функцию Типа
Чтобы получив тип вызвать обобщенную функцию.
(Почему то нет выборя языка для подсветки кода)
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
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 TEntity ПолучитьЭлементСправочника<TEntity>(string ID) where TEntity : class
{
var query2 = from спр in this.Set<TEntity>()
where спр.ID = ID
select спр;
return query2.SingleOrDefault<TEntity>();
}
Чтобы получив тип вызвать обобщенную функцию.
(Почему то нет выборя языка для подсветки кода)
Добрый всем день. Наконец дошли руки и до Linq.
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
Так вот Периодические возвращается
System.Data.Entity.Core.Common.Internal.Materialization.CompensatingCollection<<>f__AnonymousType0<string,System.DateTime>>
Пока писал уже нашел решение FirstOrDefault()
Интересно, что генерится такой запрос
Вопрос такой как создать обобщенную функцию.
в 1С есть поля неопределенного справочника где есть тип и ид
То есть хотелосбы обощенную функцию Типа
Чтобы получив тип вызвать обобщенную функцию.
Сейчас попробую
(Почему то нет выборя языка для подсветки кода)
Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
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 class ИнтерфейсИД
{
public virtual string ID { get; set; }
}
public partial class Model1 : DbContext
{
public TEntity ПолучитьЭлементСправочника<TEntity>(string ID) where TEntity : class,ИнтерфейсИД
{
var query2 = from спр in this.Set<TEntity>()
where спр.ID == ID
select спр;
return query2.SingleOrDefault<TEntity>();
}
}
Чтобы получив тип вызвать обобщенную функцию.
Сейчас попробую
(Почему то нет выборя языка для подсветки кода)