powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Положить в лямбда Linq значение переменной
25 сообщений из 29, страница 1 из 2
Положить в лямбда Linq значение переменной
    #39844634
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет !

Фрагмент кода:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
            IQueryable<UsFn_FetchFilesByPeriod_Result> R;
            List<UsFn_FetchFilesByPeriod_Result> LR = new List<UsFn_FetchFilesByPeriod_Result>();

if (DBC_FILESORTFIELD == "FDATE")
            { 
                if (DBC_FILESORTTYPE == "ASC") R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderBy(a => a.FDATE);
                else R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderByDescending(a => a.FDATE);
                LR = R.ToList();
            }
            if (DBC_FILESORTFIELD == "FName")
            {
                if (DBC_FILESORTTYPE == "ASC") R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderBy(a => a.FName);
                else R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderByDescending(a => a.FName);
                LR = R.ToList();
            }
            if (DBC_FILESORTFIELD == "FDays")
            {
                if (DBC_FILESORTTYPE == "ASC") R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderBy(a => a.FDays);
                else R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderByDescending(a => a.FDays);
                LR = R.ToList();
            }



Понимаю, что это жутко криво. Надо бы сделать красиво, для чего подсунуть в лямбду значение переменной DBC_FILESORTFIELD.
В разных источниках прочитал, что это можно сделать. Но как-то очень сложно, на мой взгляд.
Подскажите, пожалуйста, простой способ, если он есть, конечно :)

Спасибо за любую помощь.
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844644
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
string sortExpr = "FDATE DESC";
R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderBy(sortExpr).ToList();



ну и аналогично меняете выражение
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844647
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
LR = DB.Us... .ToList()
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844651
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не забудьте:
Код: c#
1.
2.
using System.Linq;
using System.Linq.Dynamic;
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844667
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsGuns,

тебе нужно реализовать паттерн "Спецификация"- 100% под твой случай.
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844703
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public static IEnumerable<TEntity> OrderBy<TEntity>(this IEnumerable<TEntity> source, 
                                                    string orderByProperty, bool desc)
{
    string command = desc ? "OrderByDescending" : "OrderBy";
    var type = typeof(TEntity);
    var property = type.GetProperty(orderByProperty);
    var parameter = Expression.Parameter(type, "p");
    var propertyAccess = Expression.MakeMemberAccess(parameter, property);
    var orderByExpression = Expression.Lambda(propertyAccess, parameter);
    var resultExpression = Expression.Call(typeof(Queryable), command, 
                                           new[] { type, property.PropertyType },
                                           source.AsQueryable().Expression, 
                                           Expression.Quote(orderByExpression));
    return source.AsQueryable().Provider.CreateQuery<TEntity>(resultExpression);
}
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844715
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Код: c#
1.
2.
            string sOrder = DBC_FILESORTFIELD + " " + DBC_FILESORTTYPE;
            R = DB.UsFn_FetchFilesByPeriod(Yb, Mb, Ye, Me).OrderBy(sOrder);



Ошибка 1 Аргументы-типы для метода "System.Linq.Enumerable.OrderBy<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)" не должны определяться по использованию. Попытайтесь явно определить аргументы-типы. F:\Prog\ASPNET\HeroAPI\HeroAPI\MainForm.cs
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844719
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит в вашем случае придётся использовать вариант , который вам предложил ЕвгенийВ
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844720
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
using System.Linq.Dynamic;

Ругается, что нет в пространстве имен. VS 2012, EF5
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844722
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВ, Спасибо, конечно, но для меня это слишком сложно пока :)
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844723
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsGunsusing System.Linq.Dynamic;

Ругается, что нет в пространстве имен. VS 2012, EF5

https://www.nuget.org/packages/System.Linq.Dynamic
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844727
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_OneMsGunsusing System.Linq.Dynamic;

Ругается, что нет в пространстве имен. VS 2012, EF5

https://www.nuget.org/packages/System.Linq.Dynamic

There are 8 reliases. What one can I download ?
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844730
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какую версию .NET использует ваш проект, для такой и берите
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844737
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или у вы на 3.5 ещё?
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844739
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One, там все для .NET 4.0, а у меня 4.5

Ладно, обойдусь сортировкой ListView : https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.listview.listviewitemsorter?view=netframework-4.8

Всем большое спасибо.

PS. Вот что убивает после Delphi - это архисложность реализации очень многих простых вещей :)
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844740
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нормально, ставь
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844742
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через nuget package manager>... for solution
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844743
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsGunsPS. Вот что убивает после Delphi - это архисложность реализации очень многих простых вещей :)так а зачем слез? сидел бы дальше на Delphi. Там ведь такая простая реализация простых вещей, что любой, переходящий с другого языка, поймет все моментально.
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844749
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MsGunsKonst_One, там все для .NET 4.0, а у меня 4.5

Ладно, обойдусь сортировкой ListView : https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.listview.listviewitemsorter?view=netframework-4.8

Всем большое спасибо.

PS. Вот что убивает после Delphi - это архисложность реализации очень многих простых вещей :)
В делфях связка TDBGrid-TDataSource-TDataSet-TQuery/TStoredProc предельно ясна и понятна. Попробовал сделать то же самое в VS+EF - это что-то с чем-то. Началось с того, что пришлось качать с NuGet EntityDtatSource. Он появился в панели элементов, но почему-то недоступный. Кончилось тем, что обошелся ListView, благо редактировать ничего в гридах не даю :)
Допускаю, конечно, что дело на 90% в моей неопытности в C#
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844751
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProMsGunsPS. Вот что убивает после Delphi - это архисложность реализации очень многих простых вещей :)так а зачем слез? сидел бы дальше на Delphi. Там ведь такая простая реализация простых вещей, что любой, переходящий с другого языка, поймет все моментально.

Жизнь заставила :)
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844756
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MsGunsДопускаю, конечно, что дело на 90% в моей неопытности в C#ура!


MsGunsTDBGrid-TDataSource-TDataSet-TQuery/TStoredProcпротивMsGunsVS+EFраньше ездил на велосипеде, там все понятно, руль и две педали. Сел в машину, руль не такой, педали не такие, куча непонятных кнопочек, даже тронуться не смог.

Ты можешь не использовать ни EF ни Linq - никто не заставляет. Берешь старый добрый DataGrid, SQL-запросы и вперед.
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844759
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProMsGunsPS. Вот что убивает после Delphi - это архисложность реализации очень многих простых вещей :)так а зачем слез? сидел бы дальше на Delphi. Там ведь такая простая реализация простых вещей, что любой, переходящий с другого языка, поймет все моментально.

Самый простой пример:
Вот почему в шарпе есть Int.ToString есть, а назад String.ToInt нетути ? Вместо этого есть какой-то Int.Parse ?
Другой пример: почему IObjectQuery может использоваться только ОДИН раз ? Для того, чтобы, например, посчитать кол-во полученных записей, приходится извращаться навешивая какие-то извращения типа ридеров.
И таких примеров сотни и тысячи.

Ладно, это крик души, не более :)
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39844761
MsGuns
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProMsGunsДопускаю, конечно, что дело на 90% в моей неопытности в C#ура!


MsGunsTDBGrid-TDataSource-TDataSet-TQuery/TStoredProcпротивMsGunsVS+EFраньше ездил на велосипеде, там все понятно, руль и две педали. Сел в машину, руль не такой, педали не такие, куча непонятных кнопочек, даже тронуться не смог.

Ты можешь не использовать ни EF ни Linq - никто не заставляет. Берешь старый добрый DataGrid, SQL-запросы и вперед.

Красиво написано :) А теперь, если можно, код в студию :) Сколько там будет строк и сколько библиотек нужно еще накачать чтобы все это работало ?

"Вперед" - не хочу. MVC - классная вещь бесспорно. В Delphi 7 и C-builder, где я сидел лет 10, этого не было (или я не знал где, если и было)
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39868783
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Положить в лямбда Linq значение переменной
    #39868791
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat Dynamic Linq лишь бы что-то написать, чтоб про тебя не забыли
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Положить в лямбда Linq значение переменной
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]