none
Linq 动态查询问题 DynamicLibrary.cs RRS feed

  • 问题

  • 用linq的动态查询(DynamicLibrary.cs 号称微软工程师提供的一个Linq动态查询类),代码如下
    WhereStr = "RegisterTime>2010-1-1";
    var getUserList = db.BBSUser.Where(WhereStr).ToList();

    报错说Operator '>' incompatible with operand types 'DateTime?' and 'Int32'

    我应该怎么拼接这个WhereStr 条件字符串中的日期呢? 我试过给日期加上 ‘’号或“”,都是报错。只是'Int32' 变为 char 或 String 不能跟日期型做比较。

    网上资料太少,不知微软的专家能否指教一下。
    谢谢!
    2010年1月7日 9:20

答案

  • 今天仔细推敲了一下,发现原来不需要要用到动态Linq的方法也能实现动态查询的结果,只要把握到Linq的实际执行原理。

    哪么使用DynamicLibrary.cs的方法到底好处在哪里,适用于什么人群?或许本来就是错误。

    或者也说明为什么这么少该方面的资料的原因所在了,就是用处不大,呵呵。。。。。。

    不过,如果它能解决日期类型的错误,对于沿用拼接Sql语句但又想使用Linq的人来说,还是相当方便的。

    • 已标记为答案 Mog Liang 2010年1月14日 10:01
    2010年1月10日 2:51

全部回复

  •  db.BBSUser.Where(c=>c.RegisterTime> DateTime.Parse("2010-1-1"));
    2010年1月7日 12:00
  • :《
    上面这位大哥,
    我说的是linq的动态查询,不是Linq查询,Linq查询我也知道这么写,能否认真看看我的问题!
    在Linq动态查询,可能Linq的动态查询还是没什么人知道。

    我都在怀疑Linq的动态查询是否是出之微软的工程师写的?



    2010年1月8日 1:29
  • "RegisterTime>CAST('2010-1-1'AS DATETIME) ";
    或者
    "RegisterTime>CAST('2010011'AS DATETIME) ";
    2010年1月8日 8:01
  • 还是不行哦,

    提示错误:Character literal must contain exactly one character

    我想是转成 '2010-1-1' 后动态Linq并不会解释。


    2010年1月8日 8:34
  • 用linq的动态查询(DynamicLibrary.cs 号称微软工程师提供的一个Linq动态查询类),代码如下
    WhereStr = "RegisterTime>2010-1-1";
    var getUserList = db.BBSUser.Where(WhereStr).ToList();

    报错说Operator '>' incompatible with operand types 'DateTime?' and 'Int32'

    我应该怎么拼接这个WhereStr 条件字符串中的日期呢? 我试过给日期加上 ‘’号或“”,都是报错。只是'Int32' 变为 char 或 String 不能跟日期型做比较。

    网上资料太少,不知微软的专家能否指教一下。
    谢谢!

    有哪位专家来帮忙一下,万分感激!
    2010年1月9日 14:47
  • 今天仔细推敲了一下,发现原来不需要要用到动态Linq的方法也能实现动态查询的结果,只要把握到Linq的实际执行原理。

    哪么使用DynamicLibrary.cs的方法到底好处在哪里,适用于什么人群?或许本来就是错误。

    或者也说明为什么这么少该方面的资料的原因所在了,就是用处不大,呵呵。。。。。。

    不过,如果它能解决日期类型的错误,对于沿用拼接Sql语句但又想使用Linq的人来说,还是相当方便的。

    • 已标记为答案 Mog Liang 2010年1月14日 10:01
    2010年1月10日 2:51
  • var getUserList = db.BBSUser.Where("RegisterTime>@0",convert.todatetime("2010-1-1")).ToList();
    这样是可以的。 
    2010年2月9日 8:18
  • 不支持 这几个函数StartsWith(), .EndsWith() 及.Contains()  ,蛮郁闷的。。
    2010年2月9日 8:24
  • 不支持 这几个函数StartsWith(), .EndsWith() 及.Contains()  ,蛮郁闷的。。

    其实当时想用这个DynamicLibrary无非是想执行动态的查询,特别是多条件的高级查询,后来发现Linq本来也可以解决这个问题,觉得DynamicLibrary就没什么用处了。
    2010年2月12日 12:03
  • 想了解一下DynamicLibrary,不知道那里有他的资料。我现在也想使用Linq to entity Framework 做动态多条件的查询。不知道他的性能怎么样!
    2010年6月10日 16:01
  • 我看到网上有Dynamic.cs文件可以实现Linq to sql的动态查询,但是我不知道怎么才能使entity FrameWork也可以达到动态查询
    2010年6月11日 9:00
  • L2E要拼SQL的话用ObjectQuery.Where

    var db = new NorthwindEntities();

    var custs = db.Customers.Where("exists (select 1 from it.Orders)");

    性能的话得找个DBA看,比如要做数据库设计、负载均衡、分区、索引等等。L2E自己不会修改程序员写的查询,所以程序员要写性能比较好的linq语句。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年6月11日 16:10
    版主
  • 这里谢谢版主大人了,可是我的代码中想查询

    var data = entity.PrefixNumber.Where("TableName like '%1%'").OrderBy(o => o.TableName);

    一运行就出现了这样的错误提示:

    在当前范围或上下文中无法解析“TableName”。请确保所有引用的变量都在范围内,已加载需要的架构,并且命名空间引用正确。, 附近 简单标识符, 列 6, 列 1.

    2010年6月12日 1:31
  • 你的查询里面有叫做TableName的字段?

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已建议为答案 Ali Kofi 2010年6月12日 6:46
    2010年6月12日 5:46
    版主
  • 知道是什么原因了

    我把代码改成这样就可以

     

                        var PrefixNumbers = entity.PrefixNumber.Where("it.DataTemplate like '%12%'").OrderBy(o => o.TableName);

    但是不知道it能不能用其他的代替。

     

    • 已建议为答案 Ali Kofi 2010年6月12日 6:47
    2010年6月12日 6:46