|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutНо последнее выражение что то очень сложное.Используй Dynamic Linq - он будет делать то же самое, но за кадром. stutне верю что нет возможности использовать полное имя свойства класаstutВ предыдущем варианте в плоском Ado.netКак это делается, я показал выше - можешь не верить дальше. Ты уж определись, что ты хочешь, типизацию или полную свободу в виде динамики. Если типизация - принимай правила игры. Для 8-10 полей, можно и тупой switch написать. Если хочешь динамику - пиши SQL ручками. Тебя, например, не смущает, что в TSQL в процедуре ты не можешь сделать переменным имя поля. Потому что процедура проходит компиляцию. И если очень хочешь динамику - пишешь полностью динамический запрос. Здесь то же самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:26 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutЕсли перенести в новую тему модераторами я не против.самому Скопировать как делают все лень конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 11:44 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Все же вышло не трудно найти вариант: value[i]=context.Balances.Where(y=>y.Date>=d2&&y.Date<=d4).Sum(x=>(int)x.GetType().GetProperty(name[i] .GetValue(x,null); - однако выскакивает эксепшн - LINQ to Entities does not recognize the method 'System.Object GetValue(System.Object, System.Object[])' method, and this method cannot be translated into store expression. Вроде в интернете написано что надо специальнь писать Expression, с чем я вообще не имел дела, хотя вроде все очень просто вышло перед этим. И каких то вменяемых примеров не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 15:50 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Тебе бы надо понять для начала - что такое лямбда и во что она компилируется - что такое IEnumerable, как работает Linq и что такое Expression - как работает Linq2Sql и что такое IQueryable В общем, надо учебник почитать по .NET и C# Тогда у тебя не будет странных потуг использовать GetType stutписать Expression ..... И каких то вменяемых примеров не нашел.Пример, который я дал выше, невменяемый? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 18:46 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stut, Динамика это повышенный уровень программирования. Иногда показан, иногда противопоказан. Так что дерзайте и думайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 19:14 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Не за много будет читать учебник и теорию 10-ый раз? В чем проблема с gettype() - что он возвращает тип обьекта, а не дальше по чейну свойсво и значение свойства обьекта? Что экспрешн единственный выход здесь? Это понятно что linq to entity(sql) компилируется в sql - но я так думаю что можно и без этих двух вариантов обойтись только используя foreach, if. Но тогда придется перечислять все свойства вручную, но без gettype.getproperty(..) не обойтись. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2018, 19:49 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Вот сколькоо не обращался здесь- всегда предлагают оклоличные пути. Предлагают читать книги, если здесь надо было бы один пример. Больше того - как раз был пропал интернет - и решение пришло с помощью самого IDE - а именно выпадающего метода AsEnumerable() - после самого linq. И действительно методы рефлексии уже с Enumeration - не вызывали экспепшена - надо было только обойти значение null из таблицы. Привожу здесь решение, без никаких экспрешенов: value[i]=context.Balances.Where (y=>y.Date>=d2&&y.Date<=d4).AsEnumrable().Sum(x=> x.GetType().GetProperty(name[i])GetValue(x,null)!=null?(int)x.GetType().GetProperty(name[i])GetValue(x,null):0); Не было проще написать чтобы трансформировать iqueriable в enumerable. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 00:32 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutи решение пришло с помощью самого IDE - а именно выпадающего метода AsEnumerable()Ну если ты все понимаешь про компиляцию запросов, почему ты сразу это сам сразу не предложил конвертировать в IEnumerable? Ну и ты понимаешь, что если раньше ты запрашивал с сервера одну строку - всего лишь сумму миллиона строк, то теперь ты перекачиваешь миллион строк с сервера на клиента и суммируешь на клиенте. Плюс рефлексия в цикле, причем даже постоянную величину в виде получения Property ты умудрился засунуть внутрь цикла. Ну раз все это тебя это устраивает - вперед к новым победам над производительностью и здравым смыслом! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 04:50 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutВот сколькоо не обращался здесь- всегда предлагают оклоличные пути. Предлагают читать книгиТак а зачем ты обращаешься здесь? Жми точку в студии, она сама предложит варианты. Понимать-то необязательно, как оно работает. А, ну и в гугле тоже все идиоты - предлагают конструировать Expression, вместо того чтобы по простому запилить AsEnumerable ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 04:53 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutНо тогда придется перечислять все свойства вручную, но без gettype.getproperty(..) не обойтись.Зачем getproperty-то???? Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
stutчитать учебник и теорию 10-ый раз?Да. Опыт показывает, что поначалу пропускаешь некоторые моменты, потому что еще не в теме в принципе. Так что и в 10-й раз прочитать не зазорно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 04:59 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Shocker.Pro Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
+1 Вот несколько ТС ты упрям, что пятый пост доказываешь что без динамики не жить. Оказывается можно! Плюс тему ещё замусолил. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 07:27 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Petro123+1Этот вариант хорош статикой. и заодно предохраняет от инъекции. А то (условно говоря) злоумышленник сможет просуммировать и поле с номером кредитной карты (при выборке в одну запись) Но если динамика все-таки будет логичнее, я бы один раз написал конструктор выражения для Sum в библиотеку и юзал бы где ни попадя. Но ТС почему-то хочет надеть штаны через голову ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2018, 07:35 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Спасибо за позитив. В любом случае хотел разобратся сегодня из этими експрешн-три... На предыдущей странице приведена функция фильтра - который возвращает bool - но надо в функции LINQ.SUM(...) - Expression<Func<T,int>>? Такой тоже позаимствованный код- Parameter Expression pe = Expression.Parameter (typeof(Balance), "b"); Expression<Func<Balance, int>> expr = Expression.Lambda<Func<Balance, int>> ( Expression.Property (pe, "Sales"), pe); return expr; - не подойдет? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 00:27 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 05:37 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Так в функцию Sum(...) надо передать аргумент, а функция уже сумирует. В любом случае, до сего момента, с деревьями выражений не имел дело (тем более в книгах). Вот есть Expression.Property(...), что возвращает какое то непонятное выражение. Вот если бы с помощью какой то функции (встроенной, кастомной, lambda) из него получить заветное object.property - вот тогда все это имеет смысл. Хотя в Quaryable.Sum(...) как раз то надо экспрешен. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 10:51 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
В моем варианте - главное избавится от двойного применение getvalue() через присутствие null. Кстати можно было и применить switch() - но когда-то делали ревью этого тестового таска, то негативно оценили использование более 5-ти if() потому я решил применить более автоматический способ. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 11:09 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutно когда-то делали ревью этого тестового таска, то негативно оценили использование более 5-ти if() Вот причина всех поисков понапрасну. Более 5 ти if или switch это нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 12:57 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutпотому я решилверно. Вместо того чтобы наращивать функционал, программист решил... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 12:59 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutя решил применить более автоматический способ.Ты решил не более автоматический способ применить, а отказаться от суммирования на стороне сервера. Я тебе это выше объяснял, но, видимо, не дошло. ( и интересно, как этому отнеслись те, кто делал ревью, или им пофиг? ) Более автоматическим способом было бы использование библиотеки Dynamic Linq для формирования выражения. stutнегативно оценили использование более 5-ти if()потому что дилетанты. Задача: Вывести в консоль три раза строку ABCDEF: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 15:00 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Опять же, если упоротые дилетанты запрещают тебе ковырять в носу использовать if-ы, кто тебе мешает заранее сформировать массив выражений по каждому полю и сложить их в Dictionary<string, Expression<Func<T, int>>> и потом извлекать оттуда по индексу sums[fieldname]. Это-то тебе твои гуру разрешат? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 15:03 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
stutВ моем варианте - главное избавится от двойного применение getvalue() через присутствие null.Твой вариант надо выкинуть на помойку. Но сам этот вопрос показывает, что ты толком даже не понял, что такое делегат. Так что не зря я тебя отправлял читать учебник. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 16:10 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Зря вы критикуете. На стековере много подобных вопросов - и многие там бы хотели применить рефлексию но как там написано она не работает с getvalue(). Вот привожу краткий метод, который надо передать как аргумент в Sum(...). Но так же применить к нему .compile() иначе получаю какой то алогичный эксепшн - что нуллабл тайп должны иметь значение: public static Expression<Func<Balance,int>> selectonefield (object value, string Prop) { ParameterExpression pe=Expression.Parameter(typeof(Balance), "balance"); Expression<Func<Balance,int>> expression = Expression.Lambda<Func<Balance,int>>(Expression.Property(pe,Prop), pe); return expression;} ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 17:06 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Рефлексия не работает с GetValue()! это выше моих сил. stutВот привожу краткий методТы просто не читаешь, что я пишу. Даже ссылку на то, как свой код оформлять. Похоже, тебя бесполезно направлять на правильный путь, ты, видимо, из принципа будешь делать по-своему. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 17:26 |
|
EF работа с code first или database first?
|
|||
---|---|---|---|
#18+
Говоря о чтение книг - лутче ознакомится с примерами - например с двумя строками с https://www.codeproject.com/Articles/235860/Expression-Tree-Basics. Странно что в моем методе value вообще не используется в описание метода. Хотя при сумирование передается ссылка this на обьект. Касательно делегатов то как начинающего с джавы, они часто кажутся усложнением ситуации. Как и ваша параметризация название метода Selectonefrommany<T>, если это не заведомая ошибка. Так же можно заменить что это linq можно погрупировать по свойству но придется использовать динамику, создавать новые анонимные типы с полями названия свойства, и сумы по свойству - или применять дикшионари, но зачем. И кстати это десктопная апликация что имеет мало общего с серверами - хотя понятно что потребность в такой апликации может возникнуть и в большой корпоративной системе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2018, 17:33 |
|
|
start [/forum/moderation_log.php?user_name=%D0%94%D0%BC%D0%B8%D1%82%D1%80%D0%B8%D0%B986]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 1121ms |
total: | 1424ms |
0 / 0 |