Динамический выбор в запросе с linq

Я вижу Dynamic linq в ссылке ниже: СкоттГу

Я хочу использовать этот метод для выбора динамического запроса следующим образом:

У меня сложный выбор, и это не решает мою проблему, это мой выбор:

Select sUserName,sname, sFamily,sMobail,sid,sNumberSt,sActive,sPic,sDate from Student where {0} order by sid desc";

где {0} является сложным условием:

sname like %somthing% and susername=N'something' and sid in (select sidfk from tablex where userteacher=N'name1')

и это условие передается методу. Я должен сказать, что: я не знаю своего состояния, моего состояния, указанного в параметрах поиска пользователя. Это условие, о котором я говорю, является лишь одним из примеров того, что я хочу сделать.

Как я могу это сделать?


person mina morsali    schedule 04.12.2013    source источник


Ответы (3)


Единственный способ решить мою проблему:

Я отправляю два параметра вместо одного, один для студента и один для таблицы:

var az = db.tablex.Where(p => p.userteacher== name1)
            .Select(p => p.sidfk).ToList();
        var query = db.Students.Where(textSearch).Where(s=>az.Contains(s.sid)).OrderByDescending(s => s.sid)
            .Select(s => new
            {
               s.sUserName,
                s.sname,
                s.sFamily,
                s.sMobail,
                s.sid,
                s.sNumberSt,
                s.sActive,
                s.sPic,
                s.sDate,
            });

который textSearch:

sname like %somthing% and susername=N'something'

с динамической связью

есть ли лучший способ?

person mina morsali    schedule 05.12.2013

Вам не нужно использовать динамический linq для этой ситуации.

string paramA = "", paramB = "";

var query = from x in context.table1
            where x.name == paramA
            where context.table2.Where(y => y.field1 == paramB).Any(y => y.id == x.id)
            select x;
person Aducci    schedule 04.12.2013

Dynamic Linq обычно используется, если в запросе вы не знаете, какое поле будет использоваться, поэтому в вашем образце вы используете только параметры для условий с полем, поэтому вам не нужен динамический linq

вы можете немного оптимизировать свой запрос, как это

var query = from student in db.Students
            join teacher in db.tablex on student.sid equals teacher.sidfk
            where student.sname.Contains('somthing') && 
                  susername=='something' &&
                  teacher.userteacher=='name1'
            orderby s.sid descending 
            select new
                {
                    s.sUserName,
                    s.sname,
                    s.sFamily,
                    s.sMobail,
                    s.sid,
                    s.sNumberSt,
                    s.sActive,
                    s.sPic,
                    s.sDate,
               };
person Grundy    schedule 07.12.2013
comment
да, я знаю, я не знаю своего состояния, мое условие указывается с помощью параметров поиска пользователя. Это условие, которое я говорю, является только одним примером того, что я хочу сделать. - person mina morsali; 08.12.2013
comment
в динамическом linq не такой синтаксис, как в SQL, поэтому, возможно, вам нужно использовать что-то еще? - person Grundy; 08.12.2013