我在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上找到这些信息,但很难弄清楚如何说出我的搜索.
我正在为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.
有什么方法可以做到以下一个或两个:
NullReferenceException?Any?我觉得必须有办法做这些事情,但我似乎无法找到它.我使用的是VS2010 Premium,我安装了Resharper,VS Power Tools和其他一些扩展程序.如果有一个附加组件可以做到这一点,我会很好.
正如Eric Lippert指出的那样,当代码在Release配置中编译时,无法确定NR异常的来源.我只是询问在调试模式下工作.如果Visual Studio(或VS的某些扩展)可以在调试时跟踪引用的来源,那将回答我的问题.
第二个问题 - 如何打破和逐步通过一个lambda - 已经得到了回答,但我仍然想知道是否有一种自动方法来追踪空引用.
我从stackoverflow本身得到了这个表达式 - /^\d+(\.\d{0,9})?$/.
它负责:
2
23
23.
25.3
25.4334
0.44
Run Code Online (Sandbox Code Playgroud)
但失败了.23.可以将其添加到上面的表达式中,还是可以处理所有这些表达式的内容?
我试图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当我将项目拖动处理程序被调用,而不是在页面加载.
可能相关的信息:
当我拖动项目时,控制台中显示的事件如下所示:
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)我尝试了各种调整,但没有任何效果:
jQuery.Event构造函数并手动设置上述属性document.getElementByIdmousedown或mousedown.draggable代替drag(这是基于我发现的一些变通方法代码)
是的,我意识到我可以单独定义处理程序.我想要这样做的部分原因是可以访问ui参数,这使我可以轻松获得元素的位置和偏移量.我可以通过其他方式找到它们,但这很烦人.我也很好奇为什么这不起作用.
搜索谷歌和搜索引擎优化没有解决方案,只是与我无关的解决方法,以及有关同一问题的其他投诉.来自jQUI团队的JörnZaefferer建议使用jQuery.simulate插件作为解决方法,因此可能无法实现.奇怪的是,它们不会与其他jQuery事件保持一致.
我有一个带有复合主键的表,安排如下:
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正确设置?
我对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)
但是排序与示例中的不同...
谢谢您的帮助!
我需要一种能够识别没有空格的字符序列中的单词(基于字典)的算法.
比方说,例如,序列是:
无
空间它应该识别空间和更少.
并且可能存在可以识别更多单词的情况.很难给出这样的例子,但我会尝试一下:
例如:太空光
识别的单词:空格和轻微(1)
识别的单词:空格和光(2)
所以算法也应该能够找到那种变化.
我有一个控制器调用视图.在视图中有一个局部视图,插入如下:
@{ Html.RenderPartial("PartialViewName", this.Model);}
Run Code Online (Sandbox Code Playgroud)
这很好用.
但是在控制器中我希望在ViewData或ViewBag中添加一些我将在局部视图中使用的东西.我怎样才能做到这一点?
存在这个问题的许多变体,我尝试了一些生成器,但我似乎找不到与之匹配的正则表达式.假设我的电话号码看起来像"345-324-3243 X039"我想删除除数字,字母x和加号(显示在国际号码中)之外的所有内容.
这是我目前的非工作正则表达式和代码:
$phone = "345-324-3243 X039";
preg_replace('[^\d|x|\+]', '', $phone);
Run Code Online (Sandbox Code Playgroud)
我希望它出来"3453243243X039",但我得到"30234-2349".
我有一个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) c# ×3
javascript ×2
regex ×2
.net ×1
algorithm ×1
count ×1
debugging ×1
enums ×1
join ×1
jquery ×1
jquery-ui ×1
linq ×1
performance ×1
php ×1
preg-replace ×1
resharper ×1
sql ×1
sql-server ×1
string ×1
viewdata ×1