(ниже я буду использовать квадратные скобки для параметров шаблонов)
В основном, "дизайн" сводится к построению добрососедских отношений с системой типов C#. Некоторые возможности системы типов достаточно приятны, и ими можно удобно пользоваться.
На работе я сделал прототип вот такого подъязыка для запросов к нашей БД:
string name = "b1
(
Read more... )
Comments 44
Я думал я один такой ненормальный :) Тоже похожую штуку сделал.
var GetInternalGroups = SQL.SELECT.DISTINCT[InternalGroups.Id]()
.FROM()
.JOIN(InternalGroups.PrincipalId == AccessRecords.PrincipalId)
.JOIN(AccessRecords.ACLId == DataObjs.ACLId)
.WHERE(DataObjs.Id == "DataObjectId".AsIntParam());
var DeleteSystem = SQL.DELETE.FROM .WHERE(DataObjectAttachments.DataObjectId == DataObjectAttachments.DataObjectId.AsParam ( ... )
Reply
Как я понимаю, WHERE сделан через перегрузку операторов?
А в квадратных скобочках Select находится проекция, так?
Reply
1. Не пускать мусор в выражения (только колонки, параметры и константы)
2. Избавиться от a =>
Да, квадратные скобки this[] - это проекция. (Круглые после них - это опечатка)
Каждая таблица - класс. Каждая колонка - поле.
Reply
1. Не пользоваться ORM, а иметь чистый SQL (Все скрипты генеряться один раз при старте). У нас просто не все операции хорошо ложаться на манипуляции с отдельными объектами.
2. Одновременно поддерживать: MS SQL Server, MS SQL Compact, Oracle, MySQL.
(Кстати, с поддержкой MS SQL Compact есть проблемы у многих ORM)
3. Добавить поддержку разных типов баз в систему, где все скрипты уже написаны, для MS SQL Compact.
Reply
Проще сделать визитор, который будет один на всех и обходить свой Expression (или не свой, если ты Expression Tree используешь)
http://blogs.msdn.com/b/mattwar/archive/2007/07/31/linq-building-an-iqueryable-provider-part-ii.aspx
смотреть на ExpressionVisitor
Reply
> Проще сделать визитор, который будет один на всех и обходить свой Expression
В целом +1, но можно делать и без классического визитора, реализовать двойную диспетчеризацию на ручной тяге - через (хэш-)таблицу полиморфных функций.
Reply
Reply
Reply
(The comment has been removed)
Reply
(The comment has been removed)
Reply
Reply
Может, кто ещё сделает, я этим заниматься не буду. ;)
Reply
Reply
Я это читал, если что.
Reply
Не очень понятно. Ты же всё равно копируешь код из редактора, заменяя проблемные символы? В чём преимущество «Ctrl+H „<“ „[“» над «Ctrl+H „<“ „<“»?
(Прошу прощения за многократные правки.)
Reply
Reply
Leave a comment