Прошу совета по нескольким проблемам. Искал, но не нашел.
Например есть такой запрос
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>();
}
}
Чтобы получив тип вызвать обобщенную функцию.
Сейчас попробую
(Почему то нет выборя языка для подсветки кода)
03.09.15 07:51: Перенесено из '.NET'
и солнце б утром не вставало, когда бы не было меня
public class КлассИД
{
public virtual string ID { get; set; }
}
public partial class Model1 : DbContext
{
public TEntity ПолучитьЭлементСправочника<TEntity>(string ID) where TEntity : КлассИД
{
var query2 = from спр in this.Set<TEntity>()
where спр.ID == ID
select спр;
return query2.SingleOrDefault<TEntity>();
}
public partial class ДляПериодических : КлассИД
{
public DateTime ДатаДляПериодическихРеквизитов = DateTime.Now;
[Key]
[Required]
[StringLength(9)]
override public string ID { get; set; }
Вопрос не будели каких то проблем?
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Qbit86, Вы писали:
Q>Милота какая, вокруг аж иконы замироточили в припадке патриотизма.
Причем тут патриотизм? Я на 1С пишу не из-за патриотизма, а из за того, что мне на русском проще писать, придумывать названия приложений и тд.
Да и поля отображаемых классов тоже на русском. Если ты не заметил это отображение таблиц 1С.
Плохо то, что на C# приходится совмещать языки переключая клавиатуру. Но ничего страшного в этом нет.
А вот правильно заметил нужно
var бд = Константы1С.ГлобальныйКонтекст.db;
заменить на
var бд = Константы1С.ГлобальныйКонтекст.БД;
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Плохо то, что на C# приходится совмещать языки переключая клавиатуру. Но ничего страшного в этом нет. > var бд = Константы1С.ГлобальныйКонтекст.бд;
Но переключать ведь всё равно приходится (для "var").
Видел у коллеги пунто свичер, который менял по CTRL раскладку напечатанного слова.
Раз уж вы извращаетесь с идентификаторами (с точки зрения обычного .net-разработчика), то PS может здорово облегчить вам жизнь, ибо он дает возможность печатать идентификаторы по-русски и не переключать раскладки клавиатуры.
Здравствуйте, Venom, Вы писали:
V>Здравствуйте, Serginio1, Вы писали:
S>>Плохо то, что на C# приходится совмещать языки переключая клавиатуру. Но ничего страшного в этом нет. >> var бд = Константы1С.ГлобальныйКонтекст.бд;
V>Но переключать ведь всё равно приходится (для "var"). V>Видел у коллеги пунто свичер, который менял по CTRL раскладку напечатанного слова. V>Раз уж вы извращаетесь с идентификаторами (с точки зрения обычного .net-разработчика), то PS может здорово облегчить вам жизнь, ибо он дает возможность печатать идентификаторы по-русски и не переключать раскладки клавиатуры.
Спасибо! Совсем про него забыл
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, DarthSidius, Вы писали:
V>>Видел у коллеги пунто свичер, который менял по CTRL раскладку напечатанного слова.
DS>Перестал он это делать в VS
Здравствуйте, Serginio1, Вы писали:
V>>Но переключать ведь всё равно приходится (для "var"). V>>Видел у коллеги пунто свичер, который менял по CTRL раскладку напечатанного слова. V>>Раз уж вы извращаетесь с идентификаторами (с точки зрения обычного .net-разработчика), то PS может здорово облегчить вам жизнь, ибо он дает возможность печатать идентификаторы по-русски и не переключать раскладки клавиатуры. S> Спасибо! Совсем про него забыл
Я попробовал, кстати, и пунто свичер переключает раскладки не так как надо, к сожалению.
Дело в том, что после смены раскладки напечатанного слова, он меняет и раскладку ввода, а весь фокус в том, чтобы этого избежать.
Плюс, в последней версии, на которой я тестил, он съедает буквы при множественном переключении раскладки, что не айс.
Такие дела.
Здравствуйте, Venom, Вы писали:
V>>>Видел у коллеги пунто свичер, который менял по CTRL раскладку напечатанного слова.
DS>>Перестал он это делать в VS
V>Как это проявляется?
V>Я попробовал, кстати, и пунто свичер переключает раскладки не так как надо, к сожалению.
V>Дело в том, что после смены раскладки напечатанного слова, он меняет и раскладку ввода, а весь фокус в том, чтобы этого избежать.
V>Плюс, в последней версии, на которой я тестил, он съедает буквы при множественном переключении раскладки, что не айс. V>Такие дела.
Ну сейчас попробовал переключает автоматически вполне сносно, выделенное слова по break. Удобно/ Спасибо!
и солнце б утром не вставало, когда бы не было меня