powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос с неопределенным количеством условий
25 сообщений из 41, страница 1 из 2
Запрос с неопределенным количеством условий
    #38838672
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. есть сущность следующего рода:
Код: 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.
25.
public class MillingCutter
    {
        public int Id { get; set; }
        public string Name {get;set;}
        public int ProviderId { get; set; }
        public int OperationId { get; set; }
        public decimal? D { get; set; }
        public decimal? d1 { get; set; }
        public decimal? ap { get; set; }
        public decimal? L { get; set; }
        public decimal? Flute { get; set; }
        public decimal? Ha { get; set; }
        public string Shank { get; set; }
        public decimal? r { get; set; }
        public decimal? H { get; set; }
        public decimal? D2 { get; set; }
        public decimal? l2 { get; set; }
        public decimal? Ta { get; set; }
        public decimal? Rd { get; set; }
        public string Chamfer { get; set; }

        public virtual Provider Provider { get; set; }
        [ForeignKey("OperationId")]
        public virtual OperationType OperationType { get; set; }
    }

не соображу как сделать следующее: пользователю выводить окно для ввода данных(D,d1,ap и т.п.)(это то я как раз догадываюсь как сделать) а вот как фильтровать на основании полученных данных от пользователя не соображу. как сделать условие только на те поля которые пользователь указал, например D=20, L=104
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838675
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
n => userD == null || n.D == userD
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838676
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus,
безусловно практичней и правильней использовать linq to sql, а выражение формировать в ручную из полученных от пользователя данных.
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838679
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, я наверно не правильно что то делаю: вот код контрола:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
namespace CatalogueInstrument.Controllers
{
    public class DefaultController : Controller
    {
        //
        // GET: /Default/
        private CatalogueInstrumentContext db = new CatalogueInstrumentContext();

        public ActionResult Index()
        {
            decimal? D = 20;
            decimal? d1 = 20;
            decimal? ap = 20;
            decimal? L = 
            var cutters = db.MillingCutters.Where(c=>c.D==null||c.D==D);
            return View(cutters);
        }

    }
}


данный запрос возвращает мне значения где D==null, что я делаю не так!? мне необходимо что бы при наличии D были значения где D=то что ввел пользователь
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838685
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rusя наверно не правильно что то делаюда, вы невнимательно смотрите на то, что я написал и не пытаетесь его понять
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838686
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может я неправильно вопрос сформулировал. т.е. я ожидаю при отсутсвии значения у параметра что бы он вообще не фигурировал в запросе, введены все 4 параметра запрос выглядит как то так:
Код: c#
1.
2.
3.
4.
5.
decimal? D = 20;
decimal? d1 = 20;
decimal? ap = 20;
decimal? L = 104;
var cutters = from cutter in db.MillingCutters where cutter.D == D && cutter.d1 == d1 && cutter.ap == ap && cutter.L==L select cutter;


иначе например так
Код: c#
1.
2.
3.
4.
5.
decimal? D = 20;
decimal? d1 = 20;
decimal? ap = 20;
decimal? L = null;
var cutters = from cutter in db.MillingCutters where cutter.D == D && cutter.d1 == d1 && cutter.ap == ap;
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838688
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Probald56rusя наверно не правильно что то делаюда, вы невнимательно смотрите на то, что я написал и не пытаетесь его понять
поправте меня: n => userD == null || n.D == userD я это понимаю как userD==null или userD=значение.правильно я понял?
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838693
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть либо пользователь не дал значение: userD == null (и тогда вторая часть условия не проверяется), либо поле сущности равно значению, которое указал пользователь
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838697
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus,
Уважаемы, остановитесь нести бред из детского сада.
Поднимитесь на уровень выше
Вам надо в гугде набрать - c# convert string to expression
что бы для каждого параметра создать выражение,( есть не плохие тулзы для этого (dynamicexpression))
а потом суммировать что получите в единое выражение
набрать : -C# append expressions
а в конце вставить что получилось в Where и всё..
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838714
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и так собрать
Код: c#
1.
2.
3.
IQueryable<MillingCutter> cutters = db.MillingCutters();
if (D != null) cutters = cutters.Where(n => n.D == D);
if ...

EF скомпонует все в единый where
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838732
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro огромное спасибо за конкретный пример.
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838735
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степи, может для Вас это "детский лепет" а я не знал о таком способе(если бы знал то не спрашивал) и Вам спасибо за источник информации
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38838749
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus,
модератор, в туториал
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
using DynamicExpression = System.Linq.Dynamic.DynamicExpression;

namespace DynamicExpr
{
    public class Test
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
       
    }
    class Program
    {
        static readonly List<Test> List = new List<Test> { new Test { Id = 1, Name = "aa", Price = 23 },
            new Test { Id = 2, Name = "bb", Price = 200 }, new Test { Id = 3, Name = "cc", Price = 200 } }; 
        static readonly Dictionary<string,object> WhereDictionary=new Dictionary<string, object>(); 
        private static object Func;

        static void Main(string[] args)
        {
           // WhereDictionary.Add("Id", 2);
           // WhereDictionary.Add("Name", "bb");
            WhereDictionary.Add("Price", 200);
            
            var acc = WhereDictionary.Aggregate<KeyValuePair<string, object>, Expression<Func<Test, bool>>>(null, 
                (current, o) => current.And(ExpressionCore<Test>(o.Key, o.Value)));
            Console.Write(List.Where(acc.Compile()).Count());
            Console.Read();

        }

        public static Expression<Func<T, bool>> ExpressionCore<T>(string namePropery, params object[] valuObjects)
        {
            return DynamicExpression.ParseLambda<T,bool>(namePropery+"= @0", valuObjects);
        }

       
    }

    public static class Helper
    {
         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> a, Expression<Func<T, bool>> b)
        {
            if (b != null && a == null)
                return b;
            if (b == null&&a!=null)
               throw new Exception("asshole");
            var p = a.Parameters[0];
            var visitor = new SubstExpressionVisitor();
            visitor.Subst[b.Parameters[0]] = p;
            Expression body = Expression.AndAlso(a.Body, visitor.Visit(b.Body));
            return Expression.Lambda<Func<T, bool>>(body, p);
        }
    }

    internal class SubstExpressionVisitor : ExpressionVisitor
    {
        public Dictionary<Expression, Expression> Subst = new Dictionary<Expression, Expression>();
        protected override Expression VisitParameter(ParameterExpression node)
        {
            Expression newValue;
            return Subst.TryGetValue(node, out newValue) ? newValue : node;
        }
    }
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38839528
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дополнение,
конструкция выше для композиции Where
Очень часто as asp.net
требуется сортировка по списку полей as String
таки:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
       public static Expression<Func<T, bool>> ExpressionCoreOrderBy<T>(params object[] propertyName)
        {
            return DynamicExpression.ParseLambda<T, bool>("@0", propertyName);
        }

//сумматор

       public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> a, Expression<Func<T, bool>> b)
        {
            if (b != null && a == null)
                return b;

            var p = a.Parameters[0];
            var visitor = new SubstExpressionVisitor();
            visitor.Subst[b.Parameters[0]] = p;
            Expression body = Expression.OrElse(a.Body, visitor.Visit(b.Body));
            return Expression.Lambda<Func<T, bool>>(body, p);
        }
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38839541
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степитребуется сортировка по списку полей as String
таки:Таки Dynamic LINQ .
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38839543
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Код: c#
1.
n => userD == null || n.D == userD

Index Seek с этим не дружит.

Предпочитаю:
Код: c#
1.
2.
if (userID.HasValue)
    result = result.Where(v => v.UserID == userID);
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841274
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей КShocker.Pro
Код: c#
1.
n => userD == null || n.D == userD

Index Seek с этим не дружит.

Предпочитаю:
Код: c#
1.
2.
if (userID.HasValue)
    result = result.Where(v => v.UserID == userID);


сделал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public ActionResult Index(MillingCutter Cutter)
        {
            decimal? D = Cutter.D;
            decimal? d1 = Cutter.d1;
            decimal? ap = Cutter.ap;
            decimal? L = Cutter.L;
            IQueryable<MillingCutter> cutters = db.MillingCutters;
            if (D != null) cutters = cutters.Where(c => c.D == D);
            if (d1 != null) cutters = cutters.Where(c => c.d1 == d1);
            if (ap != null) cutters = cutters.Where(c => c.ap == ap);
            if (L != null) cutters = cutters.Where(c => c.L == L);
            return View(cutters);
        }


все работает, не до конца понимаю в чем принципиальная разница между "userID.HasValue" и "D != null" на сколько я понял в обоих случаях сравнение с null идет. ну да ладно.спасибо всем откликнувшимся
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841305
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи, а зачем все эти танцы с бубном, если есть старый проверенный System.Linq.Dynamic?
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841309
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rusне до конца понимаю в чем принципиальная разница между "userID.HasValue" и "D != null" на сколько я понял в обоих случаях сравнение с null идет.Принципиальной разницы нет.
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841311
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУГде-то в степи, а зачем все эти танцы с бубном, если есть старый проверенный System.Linq.Dynamic?Ну хочется. Может оно у него медленно работает, таки строки приходится парсить.
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841315
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По вот этому рецепту http://codearticles.ru/articles/2544

Что может быть проще?

Код: c#
1.
var l = list.Where("Price == @0", 200);
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841317
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу хочется. Может оно у него медленно работает, таки строки приходится парсить.
Так он делает тоже самое через DynamicExpression.ParseLambda :)
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841324
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНу хочется. Может оно у него медленно работает, таки строки приходится парсить.
Так он делает тоже самое через DynamicExpression.ParseLambda :)Ну тогда не знаю. Бог ему судья.
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841326
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи такой Где-то в степи
...
Рейтинг: 0 / 0
Запрос с неопределенным количеством условий
    #38841377
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,
ну не ужели не понятно, что ПЕРЕМЕННОЕ число параметров, там основной акцент не на динамик, а на ADD
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос с неопределенным количеством условий
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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