【问题标题】:Dynamic select in query with linq使用 linq 在查询中进行动态选择
【发布时间】:2014-11-09 21:23:46
【问题描述】:

我在下面的链接中看到动态 linq: ScottGu

我想用这个方法来选择这样的动态查询:

我有一个复杂的选择,这种方式不能解决我的问题, 这是我的选择:

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')

并且这个条件被传递给方法。 我必须说: 我不知道我的条件,我的条件是用用户搜索参数指定的。我说的这个条件只是我想做的一个例子。

我该怎么做?

【问题讨论】:

    标签: linq linq-to-sql dynamic-linq


    【解决方案1】:

    解决我的问题的唯一方法:

    我发送两个参数而不是一个,一个给学生,一个给tablex:

    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'
    

    使用动态 linq

    还有更好的办法吗?

    【讨论】:

      【解决方案2】:

      对于这种情况,您不需要使用动态 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;
      

      【讨论】:

        【解决方案3】:

        动态 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,
                       };
        

        【讨论】:

        • 是的,我知道,我不知道我的条件,我的条件用用户搜索参数指定。我说的这个条件,只是我想做的一个例子。
        • 在动态 linq 中的语法与 SQL 不同,所以您可能需要使用其他东西吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        相关资源
        最近更新 更多