Сообщение Re: linq2db и Убивец 1С от 27.06.2020 11:35
Изменено 27.06.2020 16:55 Serginio1
Re: linq2db и Убивец 1С
Навеяно https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-efcore-5-0-preview-6/
Так в 1С есть поля неопределенных типов, справочников.
Для неопределенного спаравочника Хотелось бы что типа такого
То есть такое генерилось, но вызывалось как
ПолеНеопределенногоСправочника.Наименование
Можно так
Кроме того можно применять утиную типизацию для классов с одинаковыми именами полей
Начнем с класса предка.
Тогда можно переписать так
Ну а зная ограничение на поле то просто
ПолеСправочникеопределенногоТипа.Наименование
Так в 1С есть поля неопределенных типов, справочников.
Для неопределенного спаравочника Хотелось бы что типа такого
switch TableNumber
{
1=> null,
2=> бд.Спр_Поставщики.Where(поставщик=> поставщик.Id==SprId).DefaultIfEmpty()
select new
{
Наименование
},
3=> бд.Спр_Покупатели.Where(покупатель=> поставщик.Id==SprId).DefaultIfEmpty()
select new
{
Наименование
},
_=>null
}
То есть такое генерилось, но вызывалось как
ПолеНеопределенногоСправочника.Наименование
Можно так
let spr= switch TableNumber
{
1=> null,
2=> бд.Спр_Поставщики.Where(поставщик=> поставщик.Id==SprId).DefaultIfEmpty(),
3=> бд.Спр_Покупатели.Where(покупатель=> поставщик.Id==SprId).DefaultIfEmpty(),
_=>null
}
spr?.Наименование
Кроме того можно применять утиную типизацию для классов с одинаковыми именами полей
Начнем с класса предка.
public class СсылочныйТип
{
[Key]
[Column("_IDRRef")]
[MaxLength(16)]
public byte[] ID { get; set; }
[NotMapped]
public virtual int НомерТаблицы { get { return 0; } }
}
Номер таблицы нам понадобится для неопределенных типов.
Кроме того, мы сможем сделать дженерик метод
public TEntity ПолучитьСсылочныйЭлемент<TEntity>(byte[] ID) where TEntity : СсылочныйТип
{
var query = from спр in this.Set<TEntity>()
where спр.ID == ID
select спр;
return query.SingleOrDefault<TEntity>();
}
Тогда можно переписать так
let spr= switch TableNumber
{
1=> null,
2=> ПолучитьСсылочныйЭлемент<Спр_Поставщики>(SprId),
3=> ПолучитьСсылочныйЭлемент<Спр_Покупатели>.(SprId),
_=>null
}
spr?.Наименование
Ну а зная ограничение на поле то просто
ПолеСправочникеопределенногоТипа.Наименование
Re: linq2db и Убивец 1С
Навеяно https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-efcore-5-0-preview-6/
Так в 1С есть поля неопределенных типов, справочников.
Для неопределенного спаравочника Хотелось бы что типа такого
То есть такое генерилось, но вызывалось как
ПолеНеопределенногоСправочника.Наименование
Можно так
Кроме того можно применять утиную типизацию для классов с одинаковыми именами полей
Начнем с класса предка.
Тогда можно переписать так
Ну а зная ограничение на поле то просто
ПолеСправочникеопределенногоТипа.Наименование
И автоматически генерировать CASE WHEN
Так в 1С есть поля неопределенных типов, справочников.
Для неопределенного спаравочника Хотелось бы что типа такого
switch TableNumber
{
1=> null,
2=> бд.Спр_Поставщики.Where(поставщик=> поставщик.Id==SprId).DefaultIfEmpty()
select new
{
Наименование
},
3=> бд.Спр_Покупатели.Where(покупатель=> поставщик.Id==SprId).DefaultIfEmpty()
select new
{
Наименование
},
_=>null
}
То есть такое генерилось, но вызывалось как
ПолеНеопределенногоСправочника.Наименование
Можно так
let spr= switch TableNumber
{
1=> null,
2=> бд.Спр_Поставщики.Where(поставщик=> поставщик.Id==SprId).DefaultIfEmpty(),
3=> бд.Спр_Покупатели.Where(покупатель=> поставщик.Id==SprId).DefaultIfEmpty(),
_=>null
}
spr?.Наименование
Кроме того можно применять утиную типизацию для классов с одинаковыми именами полей
Начнем с класса предка.
public class СсылочныйТип
{
[Key]
[Column("_IDRRef")]
[MaxLength(16)]
public byte[] ID { get; set; }
[NotMapped]
public virtual int НомерТаблицы { get { return 0; } }
}
Номер таблицы нам понадобится для неопределенных типов.
Кроме того, мы сможем сделать дженерик метод
public TEntity ПолучитьСсылочныйЭлемент<TEntity>(byte[] ID) where TEntity : СсылочныйТип
{
var query = from спр in this.Set<TEntity>()
where спр.ID == ID
select спр;
return query.SingleOrDefault<TEntity>();
}
Тогда можно переписать так
let spr= switch TableNumber
{
1=> null,
2=> ПолучитьСсылочныйЭлемент<Справочник.Поставщики>(SprId),
3=> ПолучитьСсылочныйЭлемент<Справочник.Покупатели>.(SprId),
_=>null
}
spr?.Наименование
Ну а зная ограничение на поле то просто
ПолеСправочникеопределенногоТипа.Наименование
И автоматически генерировать CASE WHEN