none
如何字符串化LINQ语句以进行灵活的查询? RRS feed

  • 问题

  • 我希望以LINQ作为数据库通用访问层查询语言进行数据库查询以忽略数据库产品差异(例如可以跨越T-SQL Supported DataBase product 和 XML). 有什么方法可以把LINQ像T-SQL一样字符串化然后查询? 或者 "运行时编译"?!

    类似于这样: var queryResult= "LINQ语句";
    可以吗?

    2010年1月4日 16:06

答案

全部回复

  • 你好!

    如果这样的话你何不自己拼接 SQL 使用 SqlDataAdapter, SqlDataReader 等来获取数据呢。LINQ 要实现的就是数据强类型,你这样的做法与它的本意有矛盾,如果不用它的特性又何必用它呢。

    知识改变命运,奋斗成就人生!
    2010年1月5日 2:53
    版主
  • 那如果需要将XML也作为一种数据库格式呢? 如果是序列化的链表呢? 标准T-SQL能在XML里面 "SELECT * FROM XXX" ??? 还是需要有一中可以兼跨T-SQL Unsupported 数据库和  T-SQL Supported 数据库的通用查询语言.
    哈哈哈哈
    2010年1月5日 3:24
  • SQL SERVER 中提供了 OPENXML 语句读取XML
    知识改变命运,奋斗成就人生!
    2010年1月5日 5:30
    版主
  • 您好.
       您说的这个我知道. 但是Oracle、DB2、MySQL等数据库产品中并不提供或者并不以此种形式提供这个功能. 所以需要有一种T-SQL之上的一种查询语言可以兼跨T-SQL Unsupported 数据库和  T-SQL Supported 数据库.

    Linq 可以胜任否?
    哈哈哈哈
    2010年1月5日 5:49
  • 你好,

    你可以看看Dynamic Linq
    http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
    这个可以使用string类型的查询条件。

    如果你想使整个linq做为对象(如string)来传递并执行的话,可以尝试使用Expression Tree
    http://msdn.microsoft.com/en-us/library/bb397951.aspx


    Mog Liang
    2010年1月6日 6:13
  • 我也在用 Dynamic Linq,

    但是有些问题Dynamic Linq无法解决。

    例如
    String WhereStr = "RegisterTime>2010-1-1";
    var getUserList = db.BBSUser.Where(WhereStr).ToList();

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

    不知道你有么有这样的经验,对日期型数据的比较?

    2010年1月8日 5:26