天道酬勤,学无止境

SubSonic.Query vs SubSonic.SqlQuery

I've been using SubSonic.Query all these while, until one day when I can't do "IS NULL" by adding WHERE, then I realized that SubSonic.SqlQuery existed and it has a function of "IsNull()". After checking out the source code, Query and SqlQuery is not inherited in any way, so what's their major difference and how to decide which to use?

Edit: I just realized that I could actually do "IS NULL" by using "Comparison.Is". That makes me even more confuse as both SqlQuery and Query can almost do the same thing

评论

SqlQuery was added in version 2.1. It's vastly superior to Query as it supports is null and joins in particular. Here's a post that covers it (it was called Query2 at the time) or see my 3-part series on how I use SubSonic.

I am not sure what DB you are targeting but the IsNull Method did not work correctly for the Oracle Provider. I had to fix change a couple lines to get it to work on my machine.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Subsonic 3 ActiveRecord 嵌套选择 NotIn 错误?(Subsonic 3 ActiveRecord nested select for NotIn bug?)
    问题 我有以下 Subsonic 3.0 查询,其中包含一个嵌套的 NotIn 查询: public List<Order> GetRandomOrdersForNoReason(int shopId, int typeId) { // build query var q = new SubSonic.Query.Select().Top("1") .From("Order") .Where("ShopId") .IsEqualTo(shopId) .And(OrderTable.CustomerId).NotIn( new Subsonic.Query.Select("CustomerId") .From("Customer") .Where("TypeId") .IsNotEqualTo(typeId)) .OrderDesc("NewId()"); // Output query Debug.WriteLine(q.ToString()); // returned typed list return q.ExecuteTypedList<Order>(); } 内部查询似乎不正确: SELECT TOP 1 * FROM [Order] WHERE ShopId = @0 AND CustomerId NOT IN (SELECT CustomerId FROM
  • Subsonic 3 ActiveRecord nested select for NotIn bug?
    I have the following Subsonic 3.0 query, which contains a nested NotIn query: public List<Order> GetRandomOrdersForNoReason(int shopId, int typeId) { // build query var q = new SubSonic.Query.Select().Top("1") .From("Order") .Where("ShopId") .IsEqualTo(shopId) .And(OrderTable.CustomerId).NotIn( new Subsonic.Query.Select("CustomerId") .From("Customer") .Where("TypeId") .IsNotEqualTo(typeId)) .OrderDesc("NewId()"); // Output query Debug.WriteLine(q.ToString()); // returned typed list return q.ExecuteTypedList<Order>(); } The internal query appears to be incorrect: SELECT TOP 1 * FROM [Order]
  • Subsonic 3 - 更新 NullReferenceException(Subsonic 3 - Update NullReferenceException)
    问题 我正在使用带有 Linq 模板的 Subsonic v3.0.0.3。 我正在尝试使用以下内容更新 SQL Server Express 数据库中的记录: var db = new MyDB(Constants.Database); db.Update<Contact>() .Set(d => d.FirstName == contact.FirstName) .Where(d => d.Id == contact.Id) .Execute(); 执行此行时,我收到NullReferenceException 。 堆栈跟踪如下: at SubSonic.Query.Update.GetCommand() at SubSonic.Query.Update.Execute() 有人可能会提出问题是什么吗? 回答1 嗯 - 我会说确保存在连接字符串(我将在接下来的几周内修复丢失连接字符串的错误消息)除此之外 - 这看起来像一个问题 - 你介意在 Github 上发帖吗? 回答2 我做了一个简单的更新,给了我一个 NullReferenceException FarmDB db = new FarmDB(); db.Update<UserInfo>().Set(x => x.phone == "13679178184").Where(x => x.name == "marship")
  • Subsonic query to determine if value starts with numeric
    This is a follow-up of this question, however the context has changed. Breaking the accepted solution. This time I'm trying to use SubSonic, but it throws an errormessage using the previous accepted solution System.NotSupportedException: The method 'get_Chars' is not supported ... Line 36: char[] nums = "0123456789".ToCharArray(); Line 37: Line 38: var b = repository.GetAll().Where(q => nums.Contains(q.BrukerIdent[0])).ToList(); Line 39: Line 40: As far as I can tell q.BrukerIdent is a string. So I'm a bit thrown...
  • Subsonic 3 - Update NullReferenceException
    I am using Subsonic v3.0.0.3 with the Linq templates. I am attempting to update a record in a SQL Server Express database with the following: var db = new MyDB(Constants.Database); db.Update<Contact>() .Set(d => d.FirstName == contact.FirstName) .Where(d => d.Id == contact.Id) .Execute(); I am receiving a NullReferenceException when this line is executed. The stack trace is as follows: at SubSonic.Query.Update.GetCommand() at SubSonic.Query.Update.Execute() Any chance that someone may be able to suggest what the problem is?
  • 使用 SubSonic 3 ActiveRecord 原子地增加一个字段(Atomically increment a field using SubSonic 3 ActiveRecord)
    问题 我正在尝试使用 SubSonic 3 ActiveRecord 在 MySQL 数据库中增加一个字段。 在 SQL 中,这就是我所追求的: UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to; 我尝试了以下操作,但似乎不起作用(messages_received 似乎总是 1): _db.Update<person>() .Set("messages_received").EqualTo(x => x.messages_received == x.messages_received + 1) .Where(x => x.people_id == idTo) .Execute(); 这确实有效: string sql="UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to"; var q=new SubSonic.Query.QueryCommand(sql, _db.Provider); q.AddParameter("id_to", idTo); q.Provider.ExecuteQuery(q); 所以我有一个解决方案,但我只是想知道是否可以在不诉诸普通 SQL
  • Subsonic 3 Linq 投影问题(Subsonic 3 Linq Projection Issue)
    问题 好吧,我正用这个头撞墙;-) 给定数据库中名为 Address、Customer 和 CustomerType 的表,我想显示有关客户的组合摘要信息,因此我创建了一个查询来连接这两个表并检索指定的结果。 var customers = (from c in tblCustomer.All() join address in tblAddress.All() on c.Address equals address.AddressId join type in tblCustomerType.All() on c.CustomerType equals type.CustomerTypeId select new CustomerSummaryView { CustomerName = c.CustomerName, CustomerType = type.Description, Postcode = address.Postcode }); return View(customers); CustomerSummaryView 是一个简单的 POCO public class CustomerSummaryView { public string Postcode { get; set; } public string CustomerType { get; set; }
  • Atomically increment a field using SubSonic 3 ActiveRecord
    I'm tring to increment a field in a MySQL database using SubSonic 3 ActiveRecord. In SQL, this is what I'm after: UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to; I tried the following, but it didn't seem to work (messages_received always seemed to be 1): _db.Update<person>() .Set("messages_received").EqualTo(x => x.messages_received == x.messages_received + 1) .Where(x => x.people_id == idTo) .Execute(); This did work: string sql="UPDATE people SET messages_received=messages_received+1 WHERE people_id=@id_to"; var q=new SubSonic.Query.QueryCommand(sql, _db
  • bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase,它们有什么共同点?(bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, what do they have in common?)
    问题 对不起,如果这个问题有点主观。 我是“可以存储”、“分布式存储”或一些类似概念的新手。 我真的很想知道它们有什么共同点,并想了解所有这些。 如果我想写一个类似的产品,我需要准备什么? 回答1 NoSQL 数据库站点总结了这样的概念: 下一代数据库主要解决一些问题:非关系、分布式、开源和水平可扩展。 最初的意图是现代网络规模的数据库。 该运动始于 2009 年初,并且正在迅速发展。 通常更多的特性适用于:无模式、复制支持、简单的 API、最终一致性等等。 因此,误导性术语“nosql”(社区现在主要将其翻译为“不仅是 sql”)应该被视为上述定义的别名。 该站点还维护有关 NoSQL 数据库的文章存档。 他们中的大多数似乎都专注于特定产品,但也有一些更一般的概述。 如果您认真地想构建自己的数据库,那么分布式非关系数据库的设计模式可以很好地汇总您需要考虑的事情。 回答2 nosql 世界的好概述:http://www.vineetgupta.com/2010/01/nosql-databases-part-1-landscape/
  • VS2012-VS2013-VS2015-VS2017-VS2019的Crystal报表(Crystal Reports for VS2012 - VS2013 - VS2015 - VS2017 - VS2019)
    问题 我已经在新PC上安装了VS2012 Ultimate。 我尝试在项目中添加Crystal Reports文件,但是没有Crystal Report .crt项可用于VS2012的“添加新项”菜单中 VS2012是否有版本? 还是我必须为Crystal报表安装一个额外的安装文件,因为我已经安装了VS2012,所以该文件是多余的。 回答1 这里是! -SP 25适用于Visual Studio 2019,SP 21适用于Visual Studio 2017 SAP发布了SAP Crystal Reports,Microsoft Visual Studio的开发人员版本 您可以在这里获得它(单击“ Visual Studio IDE安装包”) 要集成“ SAP Crystal Reports,Microsoft Visual Studio的开发人员版本”,必须运行Install Executable 。 运行MSI不会将Crystal Reports完全集成到VS中。 根据定义,MSI文件仅用于运行时分发。 SP25发行版中的新增功能 Visual Studio 2019,已解决的事件,Win10 1809,安全更新 回答2 该帖子是2012年9月20日来自SAP的正确文章。 简而言之,他们仍在开发支持VS2012的Crystal Reports版本(包括对Windows 8的支持
  • Evenly duplicate games to reach a maximum amount per participant
    I have a round robin tournament where I create all the games necessary (7 games per participant) for 8 teams. I however need 10 games per participant which means I need to duplicate matchups, and on top of that 1 and 5 can't play each other. You can see from the data below the games I generated for each participant (# of games) in the order it was created which would be the round. I am trying to figure out the best possible way to duplicate the matchups and evently distribute the matchups in such a way that there aren't matchups that duplicate three times and still retain 10 games per
  • Mercurial:移植 vs. 记录 vs. qrecord vs. 搁置 vs.移植 vs. dirstate vs. 队列(Mercurial: graft vs. record vs. qrecord vs. shelve vs. transplant vs. dirstate vs. queue)
    问题 我是 Mercurial 的新手,不知何故仍在评估过程中,所以这四个概念对我来说有点混乱。 有些被提到相当于 Git 的 Staging/Index 概念,有些甚至比 Git 的 Staging 更好。 如何做好四个命令hg graft , hg record , hg qrecord和hg shelve (和hg transplant ,但这是移植物抗移植已经解释过)进行相互比较,以及队列和dirstate怎样的概念? 在哪些用例中选择一个而不是另一个? 我知道每个页面都有帮助页面,但仍然很难弄清楚每个页面的作用,因为 VCS 对我来说通常是一个新主题。 回答1 Mercurial 的设计根本不包括中转区的概念。 也就是说,本地修改和提交之间没有中间状态。 以下是您提到的每个概念的概述: hg 移植相当于 git cherry-pick。 它将提交从一个分支复制到另一个分支。 此功能的典型用例是将错误修复从一个发布分支复制到另一个发布分支。 此命令替换旧的(现在已过时) hg 移植扩展。 hg record 和hg qrecord类似于 git add --patch。 它们允许您以交互方式选择要提交的大块。 因此,如果您修改了一个文件的多个不同区域,您可以选择您真正想要提交的区域(即大块)以及您想要作为本地修改保留的区域。 qrecord仅当您启用了mq时才可用。
  • Maven deploy-file goal: Why does the first execution interfere with the second one?
    If I call two deploy-file executions in the maven-deploy-plugin <plugin> <artifactId>maven-deploy-plugin</artifactId> <executions> <execution> <id>deploy-ejb-impl</id> <goals> <goal>deploy-file</goal> </goals> <phase>deploy</phase> <configuration> <file>${implJarFile}</file> <pomFile>${implPomFile}</pomFile> <url>${project.distributionManagementArtifactRepository.url}</url> <repositoryId>${project.distributionManagementArtifactRepository.id}</repositoryId> <javadoc>${project.build.directory}/${project.build.finalName}-hund.jar</javadoc> </configuration> </execution> <execution> <id>default
  • Maven 部署文件目标:为什么第一次执行会干扰第二次执行?(Maven deploy-file goal: Why does the first execution interfere with the second one?)
    问题 如果我在 maven-deploy-plugin 中调用两个部署文件执行 <plugin> <artifactId>maven-deploy-plugin</artifactId> <executions> <execution> <id>deploy-ejb-impl</id> <goals> <goal>deploy-file</goal> </goals> <phase>deploy</phase> <configuration> <file>${implJarFile}</file> <pomFile>${implPomFile}</pomFile> <url>${project.distributionManagementArtifactRepository.url}</url> <repositoryId>${project.distributionManagementArtifactRepository.id}</repositoryId> <javadoc>${project.build.directory}/${project.build.finalName}-hund.jar</javadoc> </configuration> </execution> <execution> <id>default-deploy</id> <phase>none<
  • 列表vs ArrayList vs字典vs哈希表vs堆栈vs队列? [关闭](List vs ArrayList vs Dictionary vs Hashtable vs Stack vs Queue? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 6年前关闭。 改善这个问题 我们可以使用其中任何一个(包括List,ArrayList,Dictionary,Hashtable,Stack,Queue)来保存值或保存对其他对象的引用作为集合。 但是,我的问题是何时使用哪个? 回答1 清单 列表允许重复项,可以通过索引访问,并支持线性遍历。 ArrayList-不支持通用类型的基于数组的列表。 它不增强类型安全性,通常应避免使用。 列表-支持通用类型并强制类型安全的数组列表。 由于它是非连续的,因此它的大小可以增加,而无需为整个列表重新分配内存。 这是更常用的列表集合。 散列 哈希是一种查找,您在其中为列表中的每个项目赋予一个“键”,该键将在以后用于检索它。 可以将哈希视为表索引,您可以在其中提出以下问题:“我将通过此字符串值找到该对象。不允许使用重复的键。 HashTable-基本的键值对映射,功能类似于索引列表。 字典-支持通用类型并强制类型安全的哈希表。 Queue列 队列控制如何访问列表中的项目。 通常,您可以按特定方向(从正面或背面)从队列中推送/弹出记录。 中间不用于随机访问。 堆栈-LIFO(后进先出)列表,您可以在其中相互推/弹出记录。 队列-FIFO(先进先出)列表
  • 均匀复制游戏以达到每个参与者的最大数量(Evenly duplicate games to reach a maximum amount per participant)
    问题 我有一个循环赛,我为 8 支球队创建了所有必要的游戏(每个参与者 7 场比赛)。 然而,我需要每个参与者参加 10 场比赛,这意味着我需要重复对局,而且最重要的是 1 和 5 不能互相比赛。 您可以从下面的数据中看到我为每个参与者生成的游戏(游戏数量),按照游戏创建的顺序,这将是回合。 我试图找出最好的方法来复制对局,并以这样一种方式最终分配对局,即没有对局重复 3 次,并且每个参与者仍然保留 10 场比赛,并且有 1 场和 5 场不互相比赛。 任何建议都将有助于解决这个问题。 这也需要是其他可能性仍然有效的通用解决方案。 1 (6) 1 vs 2 1 vs 3 1 vs 4 1 vs 6 1 vs 7 1 vs 8 2 (7) 1 vs 2 2 vs 4 2 vs 3 2 vs 6 2 vs 5 2 vs 8 2 vs 7 3 (7) 3 vs 4 1 vs 3 2 vs 3 3 vs 7 3 vs 8 3 vs 5 3 vs 6 4 (7) 3 vs 4 2 vs 4 1 vs 4 4 vs 8 4 vs 7 4 vs 6 4 vs 5 5 (6) 5 vs 6 5 vs 7 5 vs 8 2 vs 5 3 vs 5 4 vs 5 6 (7) 5 vs 6 6 vs 8 6 vs 7 2 vs 6 1 vs 6 4 vs 6 3 vs 6 7 (7) 7 vs 8 5
  • 捆绑程序vs RVM vs宝石vs RubyGems vs gemsets vs系统红宝石(bundler vs RVM vs gems vs RubyGems vs gemsets vs system ruby [closed])
    问题 关闭。 这个问题是题外话。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 8年前关闭。 改善这个问题 我是Ruby的新手,并试图将我的想法围绕以下概念:bundler,RVM,gems,RubyGems,gemsets,system rub,我很困惑。 有人可以在最新安装的Ubuntu版本中描述我应如何管理所有这些的“最佳实践”吗? 我应该安装什么,以及如何全部使用? 我猜不推荐做sudo apt-get install ruby ,但是我不确定。 除了“其他所有Ruby内容”之外,我还在系统上尝试了该方法。 这只是增加了我的困惑。 我不是在谈论Rails,而是在谈论普通的Ruby宝石(例如,Vagrant,Chef,脚本)。 回答1 根据先前的答案,这涉及很多内容,因此请简短介绍一下。 gem是Ruby库的打包方式。 他们对Ruby来说,罐子对Java一样。 在gem文件中,您可以找到Ruby代码(.rb文件),还可以进行测试,还有一个特殊文件,提供有关gem本身的信息,例如其名称,依赖项和版本(gemspec)。 任何Ruby项目都可以通过仅需要声明依赖项的Gemfile定义所需的gem。 Rubygems是程序包管理器的名称-用于安装程序包的工具(而gems是程序包本身)。 Rubygems现在是Ruby的一部分。
  • 在 MVC5 中更新 Microsoft.Aspnet.Identity 后的编译器错误(Compiler Errors after updating Microsoft.Aspnet.Identity in MVC5)
    问题 使用 Vs2013 预览版,我创建了 ac# webapp,从对话框中选择了 MVC 和 WebAPI。 它编译好了。 如果我将 nuget 包管理器中的引用更新到 beta2 版本(包括预发行版),它将无法编译。 我收到 21 个错误,位于 AccountController.cs 和 IdentityConfig.cs 中。 我尝试更新到最新的夜间库,但出现了相同的错误。 欣赏预览代码就是这样,所以从模板重新开始。 想知道是否有人知道我可以避免更新哪个参考。 错误 1 ​​以下方法或属性之间的调用不明确:“Microsoft.AspNet.Identity.IdentityExtensions.GetUserId(System.Security.Principal.IIdentity)”和“Microsoft.AspNet.Identity.IdentityExtensions.GetUserId(System.Security.Principal)” .IIdentity)' C:\Users\Administrator\Documents\Visual Studio 2013\Projects\vs2013bootstrap\vs2013bootstrap\Controllers\AccountController.cs 115 29 vs2013bootstrap
  • Compiler Errors after updating Microsoft.Aspnet.Identity in MVC5
    Using the Vs2013 preview, i created a c# webapp selecting MVC and WebAPI from the dialog. It compiled ok. If i update the references from the nuget package manager to the beta2 versions (include Prerelease), it then fails to compile. I get 21 errors, located in the AccountController.cs and the IdentityConfig.cs. I tried updateing to the latest nightly libraries which gave the same errors. Appreciate preview code is just that so start again from the template. Was wondering if anyone knew which reference i could avoid updating. Error 1 The call is ambiguous between the following methods or
  • 将VS2012解决方案转换为VS2010(Converting VS2012 Solution to VS2010)
    问题 我正在使用VS 2012在VB项目中工作,完成后,我尝试添加安装项目。 我没有找到它(因为在VS2010之后安装项目被中止),所以我切换到VS2010,但问题是该项目无法打开,我得到了以下消息: 所选文件是解决方案文件,但由此应用程序的较新版本创建,无法打开。 我尝试了这篇文章:http://www.codeproject.com/Tips/80953/Converting-VS2010-Solution-to-VS2008并尝试从2012年转换为2010年,但出现了相同的消息。 回答1 我也面临类似的问题。 我用谷歌搜索,但找不到解决方案。 因此,我自己尝试了,这是我的解决方案。 在记事本中打开您的解决方案文件。 进行2次更改 将“格式版本12.00”替换为“格式版本11.00”(不带引号)。 将“#Visual Studio 2012”替换为“#Visual Studio 2010”(不带引号)。 希望这也对你有帮助....... 回答2 只是为了详细说明Bhavin的出色答案,编辑解决方案文件是可行的,但如果在VS2012项目中选择了.NET 4.5作为默认.NET版本,而VS2010环境却没有,则仍然会出现不兼容的错误(如David所报告)。支持这一点。 要快速解决此问题,请在文本编辑器中打开VS2012 .csproj文件