|
|
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Люди добрые, подскажите... Допустим, для примера, имеется БД с таблицами, в которых строки не удаляются, а помечаются на удаление флагом isDeleted . Скажем, тривиальная выборка для таблицы с именем Table будет выглядеть: Код: plaintext 1. 2. Для того чтобы не повторять однотипный код, отличающийся только наименованием сущностного класса, для всех организованных подобным образом таблиц БД, попытался применить рефлексию. Тогда приведенный запрос будет выглядеть следующим образом: Код: plaintext 1. Однако возникает исключение: Код: plaintext Не уверен, верна ли задумка...можно ли как то заставить движок понять, что по сути обращение происходит к свойству, помеченному атрибутом ColumnAttribute, класса, помеченного атрибутом TableAttribute, на основе которого и происходит привязка к колонке БД, а следовательно не пытаться транслировать саму рефлексию в sql-запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 10:47 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
В общем случае, возможно ли при помощи рефлексии составлять LINQ запросы к любой таблице, помещая в выражение where обращение к любому полю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 10:55 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Dynamic LINQ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 11:30 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Да, что-то подобное... Ухожу, конечно, от их концепции, мол, для каждой таблицы свой класс, у каждого свои свойства, все именовано, удобно.... ан нет, хочется один запрос сразу для всех таблиц (хотя бы тривиальных задач, которые все равно возникают) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 11:32 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Все, прочитал, кажется понял, что все просто))) Ща пойду проверять, так ли понял, спасибо!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 11:34 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
А, вообще, для такой задачи не стоит юзать динамик. Посмотрите в сторону обычного ООП: Код: plaintext 1. 2. 3. 4. 5. 6. GetPredicate Код: plaintext 1. 2. 3. 4. IFoo's Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 11:39 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
..другими словами, определить, например, интерфейс со свойствами, совпадающими именами с соответствующими свойствами сущностных классов... Ща опробую)))... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 11:53 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Попробовал, все работает!!! Остановился на последнем варианте, dynamic трогать не стал... P.S.: круто, ппля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 12:05 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Такое решение, если речь идет не о конкретном поле, а, например, о первичном ключе, в общем случае, применить не получается... Ключи по-разному именуются, ключ может быть составной... Опять же при помощи рефлексии можно выяснить, какие поля являются ключевыми (через ColumnAttribute), однако рефлексия не транслируется в sql... ...Странно, что нет очевидного способа добраться к ключевым полям...в том же DataSet'e все просто... При такой постановке задачи, что остается? Dynamic? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 16:49 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
horghТакое решение, если речь идет не о конкретном поле, а, например, о первичном ключе, в общем случае, применить не получается... Внимательно перечитайте свой начальный вопрос: horghДля того чтобы не повторять однотипный код, отличающийся только наименованием сущностного класса , для всех организованных подобным образом таблиц БД, попытался применить рефлексию. ... и определитесь, наконец, что Вам нужно. Шашечки, ехать или ползти. horghПри такой постановке задачи, что остается? Dynamic? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2010, 16:59 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
МСУВнимательно перечитайте свой начальный вопрос: Я не говорю, что начальный вопрос не решен, он как раз таки решен в полном объеме, за это Вам спасибо! Первым, что приходит на ум для определения первичных ключей таблицы и использования их в запросах LINQ, это рефлексия (так как кроме как в ColumnAttribute вообще в LINQ не нашел упоминания о первичных ключах), поэтому и вопрос дописал к этой теме...что-то подобное решению, предложенному Вами к первоначальной задаче, придумать для этой мне не удалось((( МСУ horghПри такой постановке задачи, что остается? Dynamic? Да. За ответ спасибо, буду думать в эту сторону... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 03:55 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Моя думает, что Вы выбрали не тот инструмент (ORM). Используйте классические IDbCommand's и оперируйте динамически запросами и условиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 10:18 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
))К сожалению, прямо в точку!... Однако ж, тогда для каких задач целесообразно использовать Linq2SQL? Там где нет необходимости в "общем", а "частное" более чем достаточно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 10:31 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Для решения каких задач все же эффективно использовать LINQ2SQL? А не как у меня получается: LINQ2SQL ради LINQ2SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 10:33 |
|
||
|
LINQ2SQL: рефлексия vs. трансляция выражений
|
|||
|---|---|---|---|
|
#18+
Почитайте вообще саму концепцию ORM и сделайте выводы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2010, 11:43 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=36737512&tid=1351192]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 359ms |

| 0 / 0 |
