小编Jus*_*gan的帖子

"SELECT COUNT(列)"比"SELECT COUNT(*)"更快/更慢吗?

我在MSSQL2008中运行这样的查询:

select count(*)
from t1
inner join t2 on t1.id = t2.t1_id
inner join t3 on t1.id = t3.t1_id 
Run Code Online (Sandbox Code Playgroud)

假设t1.id有一个NOT NULL约束.因为它们是内连接并且t1.id永远不能为null,所以使用count(t1.id)而不是count(*)应该产生完全相同的最终结果.我的问题是:性能是否相同?

我也想知道联接是否会影响这个.我意识到添加或删除连接会影响性能和结果集的长度.假设在不更改连接模式的情况下,您设置count为仅定位一个表.会有什么不同吗?换句话说,这两个查询之间是否存在差异:

select count(*)    from t1 inner join t2 on t1.id = t2.t1_id 
select count(t1.*) from t1 inner join t2 on t1.id = t2.t1_id 
Run Code Online (Sandbox Code Playgroud)

MySQL中的COUNT(id)与COUNT(*)为MySQL回答了这个问题,但是我找不到具体的MS-SQL答案,而且我找不到任何考虑join因素的东西.

注意:我试图在Google和SO上找到这些信息,但很难弄清楚如何说出我的搜索.

performance join count sql-server-2008

13
推荐指数
2
解决办法
2万
查看次数

Visual Studio可以告诉我哪个引用引发了NullReferenceException?

我正在为MVC Web应用程序编写单元测试,并且我一直在获取null引用异常,因为模拟的测试对象只是部分初始化.我知道哪一行抛出异常,它看起来像这样:

return Supervisor.RegistrationInformation.Registrations
    .Any(r =>
        r.RegistrationCountry.IsUSAOrCandada() &&
        (!DatesWorked.Start.HasValue || r.RegistrationDate <= DatesWorked.Start.Value) &&
        (!DatesWorked.End.HasValue || r.RegistrationExpirationDate >= DatesWorked.End.Value) &&
        //...
Run Code Online (Sandbox Code Playgroud)

那里有很多参考文献,其中任何一个都可能是问题所在.然而,NullReferenceException它本身似乎没有捕获哪个引用爆炸.我传入lambda的事实提出了另一个挑战:据我所知,我无法在调试期间单步执行lambda并查看哪些成员为rnull.

有什么方法可以做到以下一个或两个:

  • 有没有Visual Studio告诉我究竟是哪个引用NullReferenceException
  • 如果失败了,有没有办法让调试器逐步通过lambda表达式(或者只是将鼠标悬停在东西上以查看它们的值),因为它正在被评估Any

我觉得必须有办法做这些事情,但我似乎无法找到它.我使用的是VS2010 Premium,我安装了Resharper,VS Power Tools和其他一些扩展程序.如果有一个附加组件可以做到这一点,我会很好.

编辑:

正如Eric Lippert指出的那样,当代码在Release配置中编译时,无法确定NR异常的来源.我只是询问在调试模式下工作.如果Visual Studio(或VS的某些扩展)可以在调试时跟踪引用的来源,那将回答我的问题.

编辑2:

第二个问题 - 如何打破和逐步通过一个lambda - 已经得到了回答,但我仍然想知道是否有一种自动方法来追踪空引用.

c# debugging resharper nullreferenceexception visual-studio

10
推荐指数
1
解决办法
3177
查看次数

正则表达式 - 检查十进制(javascript)

我从stackoverflow本身得到了这个表达式 - /^\d+(\.\d{0,9})?$/.

它负责:

2
23
23.
25.3
25.4334
0.44
Run Code Online (Sandbox Code Playgroud)

但失败了.23.可以将其添加到上面的表达式中,还是可以处理所有这些表达式的内容?

javascript regex

8
推荐指数
2
解决办法
2万
查看次数

以编程方式触发jQuery-UI draggable的"拖动"事件

我试图drag在与jQuery-UI的draggable小部件连接之后立即在div上触发事件.我有一些代码在被拖动时会消失,我还想在页面加载后立即运行此代码.我有时在其他jQuery处理程序上使用这样的习惯用法:

$('.foo').on('bar', function() {
   console.debug('bar!');
}).trigger('bar');
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用draggable.这是我的代码:

var draggable = $('[draggable]').draggable({
   drag: function(event, ui) {
      //do some stuff
      console.debug(event);
   }
}).trigger('drag');
Run Code Online (Sandbox Code Playgroud)

drag当我将项目拖动处理程序被调用,而不是在页面加载.

可能相关的信息:

  1. 当我拖动项目时,控制台中显示的事件如下所示:

    jQuery.Event {
       type: "drag",
       target: div#myElementId.ui-draggable,
       currentTarget: document,
       delegateTarget: document,
       data: null,
       //lots of other properties
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我尝试了各种调整,但没有任何效果:

    • 使用jQuery.Event构造函数并手动设置上述属性
    • 指定我想要的确切元素 document.getElementById
    • 触发mousedownmousedown.draggable代替drag(这是基于我发现的一些变通方法代码)

  3. 是的,我意识到我可以单独定义处理程序.我想要这样做的部分原因是可以访问ui参数,这使我可以轻松获得元素的位置和偏移量.我可以通过其他方式找到它们,但这很烦人.我也很好奇为什么这不起作用.

  4. 搜索谷歌和搜索引擎优化没有解决方案,只是与我无关的解决方法,以及有关同一问题的其他投诉.来自jQUI团队的JörnZaefferer建议使用jQuery.simulate插件作为解决方法,因此可能无法实现.奇怪的是,它们不会与其他jQuery事件保持一致.

javascript jquery drag-and-drop jquery-ui

8
推荐指数
1
解决办法
6064
查看次数

使用复合主键选择刚刚插入的记录

我有一个带有复合主键的表,安排如下:

CREATE TABLE [dbo].[mytable]
(
    [some_id] [smallint] NOT NULL,
    [order_seq] [smallint] NOT NULL,
    -- etc...
)
Run Code Online (Sandbox Code Playgroud)

这两个列都是主键的一部分(它实际上是真实表上的4部分PK,但我为了示例而简化了它).没有列是身份.我正在编写一个存储过程,在下一个文件中order_seq为给定的内容插入一条新记录some_id:

CREATE PROCEDURE some_proc
(
    @some_id smallint,
    @newSeq smallint OUTPUT
)
AS
BEGIN
    insert into mytable (some_id, order_seq)
    values 
    (
         @some_id, 
         (select max(order_seq) + 1 from mytable where some_id = @some_id)
    )

    set @newSeq = /* order_seq of the newly-inserted row */
END
Run Code Online (Sandbox Code Playgroud)

我需要知道如何设置@newSeq.我想避免在插入后运行select查询,因为我不想遇到并发问题 - 我被禁止锁定表或使用事务(不要问).

据我所知,我不能使用,SCOPE_IDENTITY()因为没有列是一个标识.我怎样才能newSeq正确设置?

sql sql-server sql-server-2008 composite-primary-key

6
推荐指数
1
解决办法
2908
查看次数

Linq到实体的联盟订单

我对EDM模型Union select有问题。我在数据库中有uniqe ID的记录。例如ID列表:1、2、3、4、5、6、7、8、9

例如,我需要选择#6记录和#6之前的2条记录以及#6之后的2条记录。选择结果应为4,5,6,7,8

我这样做:

public IQueryable<photos> GetNextPrev(Int64 photoid, string userlogin)
    {
        var p1 = (from m in db.photos
                 where m.id < photoid && m.userlogin == userlogin
                 orderby m.id descending
                 select m).Take(2).Skip(0);
        var p2 = (from m in db.photos
                  where m.id >= photoid && m.userlogin == userlogin
                  orderby m.id descending
                  select m).Take(3).Skip(0);
        return (p1.Union(p2));
    }
Run Code Online (Sandbox Code Playgroud)

但是排序与示例中的不同...

谢谢您的帮助!

c# linq linq-to-entities entity-framework

5
推荐指数
1
解决办法
1万
查看次数

识别一系列字符中的单词

我需要一种能够识别没有空格的字符序列中的单词(基于字典)的算法.

比方说,例如,序列是:

空间它应该识别空间和更少.

并且可能存在可以识别更多单词的情况.很难给出这样的例子,但我会尝试一下:

例如:太空光
识别的单词:空格和轻微(1)
识别的单词:空格和光(2)

所以算法也应该能够找到那种变化.

string algorithm

5
推荐指数
1
解决办法
626
查看次数

无法在ASP.NET MVC3的部分视图中访问ViewData

我有一个控制器调用视图.在视图中有一个局部视图,插入如下:

@{ Html.RenderPartial("PartialViewName", this.Model);} 
Run Code Online (Sandbox Code Playgroud)

这很好用.

但是在控制器中我希望在ViewData或ViewBag中添加一些我将在局部视图中使用的东西.我怎样才能做到这一点?

viewdata partial-views asp.net-mvc-3

5
推荐指数
2
解决办法
1万
查看次数

删除除数字,字母x和加号(正则表达式,PHP)之外的所有内容

存在这个问题的许多变体,我尝试了一些生成器,但我似乎找不到与之匹配的正则表达式.假设我的电话号码看起来像"345-324-3243 X039"我想删除除数字,字母x和加号(显示在国际号码中)之外的所有内容.

这是我目前的非工作正则表达式和代码:

$phone = "345-324-3243 X039";
preg_replace('[^\d|x|\+]', '', $phone);
Run Code Online (Sandbox Code Playgroud)

我希望它出来"3453243243X039",但我得到"30234-2349".

php regex preg-replace

4
推荐指数
1
解决办法
2983
查看次数

我可以将int转换为C#枚举类型吗?

我有一个int带有两个值的枚举(基础类型),以及一个带有该类型参数的方法.是否可以将任何int值转换为我的枚举类型并将其传递给方法?如果是这样,枚举的优点是什么?是不是应该限制可用值的选择?

class Program
{
    public void Greeting(MyCode code)
    {
        Console.WriteLine(code);
    }

    static void Main(string[] args)
    {
        var p = new Program();
        var m = new MyCode();

        m = (MyCode) 3;
        p.Greeting(m);
    }
}

public enum MyCode:int
{
   Hello =1,
   Hai
}
Run Code Online (Sandbox Code Playgroud)

.net c# enums

4
推荐指数
2
解决办法
3870
查看次数