我想知道多个.Where()语句是否存在性能影响.例如我可以写:
var contracts = Context.Contract
.Where(
c1 =>
c1.EmployeeId == employeeId
)
.Where(
c1 =>
!Context.Contract.Any(
c2 =>
c2.EmployeeId == employeeId
&& c1.StoreId == c2.StoreId
&& SqlFunctions.DateDiff("day", c2.TerminationDate.Value, c1.DateOfHire.Value) == 1
)
)
.Where(
c1 =>
!Context.EmployeeTask.Any(
t =>
t.ContractId == c1.Id
)
);
Run Code Online (Sandbox Code Playgroud)
或者我可以将它们全部组合到一个Where()子句中,如下所示:
var contracts = Context.Contract
.Where(
c1 =>
c1.EmployeeId == employeeId
&& !Context.Contract.Any(
c2 =>
c2.EmployeeId == employeeId
&& c1.StoreId == c2.StoreId
&& SqlFunctions.DateDiff("day", c2.TerminationDate.Value, c1.DateOfHire.Value) == 1
)
&& !Context.Employee_Task.Any(
t =>
t.ContractId == c1.Id …Run Code Online (Sandbox Code Playgroud) 我有一个关于SQL Server中的公用表表达式的性能问题.在我们的开发团队中,我们在构建查询时使用了很多链式CTE.我目前正在处理一个性能很糟糕的查询.但我发现,如果我在链的中间将所有记录插入临时表中的CTE,然后继续,但从该临时表中选择,我显着提高了性能.现在,我希望得到一些帮助,以了解这种类型的更改是否仅适用于此特定查询以及为什么您将在下面看到的两种情况在性能上有很大差异.或者我们是否可能过度使用我们团队中的CTE,我们是否可以通过学习这个案例来获得性能?
请尝试向我解释这里发生的事情......
代码已经完成,您可以在SQL Server 2008上运行它,也可能在2005年运行它.一部分被注释掉了,我的想法是你可以通过注释掉一个或另一个来切换这两个案例.你可以看到你的块评论的位置,我用--block comment here和标记了这些地方--end block comment here
这是表现缓慢的情况,是未注释的默认情况.这个给你:
--Declare tables to use in example.
CREATE TABLE #Preparation
(
Date DATETIME NOT NULL
,Hour INT NOT NULL
,Sales NUMERIC(9,2)
,Items INT
);
CREATE TABLE #Calendar
(
Date DATETIME NOT NULL
)
CREATE TABLE #OpenHours
(
Day INT NOT NULL,
OpenFrom TIME NOT NULL,
OpenTo TIME NOT NULL
);
--Fill tables with sample data.
INSERT INTO #OpenHours (Day, OpenFrom, OpenTo)
VALUES
(1, '10:00', '20:00'),
(2, …Run Code Online (Sandbox Code Playgroud) 我的问题正是标题.
每次我git-tf checkin在命令提示符下运行命令时,它连接到TFS时都会询问我的用户名和密码.我怎么能避免这个?要么让它与当前用户一起登录,要么将凭证存储在配置文件中的某个位置.
我们遇到了一些死锁的问题,我发布了这个问题.
通过一些帮助和大量搜索自己,我相信我弄清楚发生了什么.为了在不控制锁升级的情况下解决死锁,我需要理解为什么sql server在插入一行时锁定整个表.
这是我的insert语句(带有重命名的变量):
DECLARE
@Type1 INT = 11,
@Type2 INT = NULL,
@Value1 VARCHAR(20) = '0',
@Value2 VARCHAR(20) = '0',
@Value3 VARCHAR(20) = '0',
@Value4 VARCHAR(20) = '0',
@Date1 DATETIME = '2011-11-25',
@Date2 DATETIME = '2011-11-25',
@Value5 NVARCHAR(50) = '',
@Value6 NVARCHAR(50) = '',
@Type3 INT = NULL,
@Value7 VARCHAR(20) = '4',
@Type4 INT = 4,
@Type5 INT = 15153,
@Type6 INT = 3,
@Type7 INT = 31,
@Type8 INT = 5976,
@Type9 INT = 5044,
@Guid1 …Run Code Online (Sandbox Code Playgroud) 当用户右键单击使用Rapahel.js创建的元素时,我需要做出响应.我读到你应该只附加一个click事件处理程序,然后决定用户点击哪个鼠标按钮.我不能让这个工作.
<!DOCTYPE html>
<html>
<head>
<script src="http://raphaeljs.com/raphael.js"></script>
<script>
window.onload = function() {
var r = Raphael('demo', 640, 480);
r.rect(10, 10, 400, 400).attr({fill: 'red'}).click(function(){
alert('test');
});;
};
</script>
</head>
<body>
<div id="demo"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
只有在单击鼠标左键时才会显示警告框.有关如何在单击右键时显示警告框的任何建议?
我用jQuery看过这个小技巧:
$(r.rect(10, 10, 400, 400).attr({fill: 'red'}).node).bind('contextmenu', function(){
alert('test');
});
Run Code Online (Sandbox Code Playgroud)
但也请阅读此评论:
是的,这也有效,但只有jQuery,最好不要使用.node,因为Raphael有时会重新创建节点 - 所以你丢失了你的事件处理程序.
我们的应用程序中存在死锁情况问题.在过去的几天里,我已经阅读了很多关于阻塞,锁定和死锁的内容,试图了解问题以便解决问题.
现在,当我读取有关死锁的错误日志信息时,我无法理解这种情况是如何存在的.看看这个(我已经重命名了表名,但重要的是在日志消息中名为OurTable的名称):
deadlock-list
deadlock victim=process1e2ac02c8
process-list
process id=process1e2ac02c8 taskpriority=0 logused=0 waitresource=OBJECT: 11:290100074:0 waittime=704 ownerId=3144354890 transactionname=SELECT lasttranstarted=2011-12-01T14:43:20.577 XDES=0x80017920 lockMode=S schedulerid=6 kpid=7508 status=suspended spid=155 sbid=0 ecid=0 priority=0 trancount=0 lastbatchstarted=2011-12-01T14:43:20.577 lastbatchcompleted=2011-12-01T14:43:20.577 clientapp=.Net SqlClient Data Provider hostname=DE-1809 hostpid=5856 loginname=2Ezy isolationlevel=read committed (2) xactid=3144354890 currentdb=11 lockTimeout=4294967295 clientoption1=673185824 clientoption2=128056
executionStack
frame procname=.dbo.RetrieveSomething line=23 stmtstart=1398 stmtend=3724 sqlhandle=0x03000b0030d42d645a63e6006a9f00000100000000000000
select
Col1
,Col2
,(
SELECT TOP(1)
Col1
FROM
OurTable2 AS C
JOIN OurTable AS ETC ON C.Id = ETC.FKId
AND E.Id = C.FKId
ORDER BY ETC.Col2
) AS Col3
from …Run Code Online (Sandbox Code Playgroud) 使用 React JS 时,如何识别是哪个按钮用于提交表单?我以为这样的事情会奏效,但事实并非如此。
export default function App() {
const onSubmit = e => {
e.preventDefault();
console.log(e.target.btn.value);
};
return (
<form className="App" onSubmit={onSubmit}>
<button type="submit" name="btn" value="wow">
Button 1
</button>
<button type="submit" name="btn" value="oh no">
Button 2
</button>
</form>
);
}
Run Code Online (Sandbox Code Playgroud)
根据标准 HTML,您应该能够将两个按钮命名为相同的名称吗?或者使用formaction属性来区分它们。
在我的用例中,按钮不了解表单。我想避免使用一些临时状态来记住单击了哪个按钮的解决方案。
在标准 HTML 中,您可以这样做:
<form action="/action_page.php">
<input type="submit" name="btn" value="Submit">
<input type="submit" name="btn" value="Submit2">
</form>
Run Code Online (Sandbox Code Playgroud)
当您提交表单btn时,将发布Submit或Submit2取决于您单击的按钮。我想在构建我的 React 表单时尽可能接近这个标准。尽可能少地使用 Javascript 和 React 的帮助。基本上只需将按钮添加到我的表单内的 DOM 并从我有权访问的提交处理程序内部的事件中收集值。
我决定开始在我们的应用程序中编写单元测试.它使用Entity Framework和存储库模式.
现在我想开始测试使用存储库的逻辑类.我在这里提供一个简单的例子.
GenericRepository类中的三个方法:
public class GenericRepository : IRepository
{
public IQueryable<TEntity> GetQuery<TEntity>() where TEntity : class
{
var entityName = GetEntityName<TEntity>();
return Context.CreateQuery<TEntity>(entityName);
}
private string GetEntityName<TEntity>() where TEntity : class
{
return typeof(TEntity).Name;
}
public IEnumerable<TEntity> Find<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : class
{
return GetQuery<TEntity>().Where(predicate).AsEnumerable();
}
}
Run Code Online (Sandbox Code Playgroud)
一个简单的逻辑类以递减的顺序从日历表中返回不同的年份(是的,我知道单词日历在我们的代码中拼写错误):
public class GetDistinctYearsFromCalendar
{
private readonly IRepository _repository;
public GetDistinctYearsFromCalendar()
{
_repository = new GenericRepository();
}
internal GetDistinctYearsFromCalendar(IRepository repository)
{
_repository = repository;
}
public int[] Get()
{
return …Run Code Online (Sandbox Code Playgroud) 所以我有一个像这样的控制器:
public class TestController : Controller
{
//
// GET: /Test/
public ActionResult Index()
{
return View("Test");
}
public ActionResult Post(IList<Test> LanguageStrings, IList<Test> LanguageStringsGroup, IList<string> Deleted, IList<string> DeletedGroup)
{
if (LanguageStrings == null)
{
throw new ApplicationException("NULL");
}
return View("Test");
}
}
public class Test
{
public string Val { get; set; }
public string Another { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样的观点:
<h2>Test</h2>
@using (Html.BeginForm("Post", "Test"))
{
@Html.Hidden("LanguageStrings[0].Val", "test1")
@Html.Hidden("LanguageStrings[0].Another")
@Html.Hidden("LanguageStrings[1].Val", "test2")
@Html.Hidden("LanguageStrings[1].Another")
@Html.Hidden("LanguageStringsGroup[0].Val", "test4")
@Html.Hidden("Deleted[0]")
@Html.Hidden("Deleted[1]")
@Html.Hidden("Deleted[2]")
@Html.Hidden("DeletedGroup[0]")
<button>Post</button> …Run Code Online (Sandbox Code Playgroud) 我在我的新项目中使用jqgrid.在特定情况下,我需要在网格中使用select元素.没问题.
我定义了colModel和列,例如像(来自wiki)
colModel : [
...
{name:'myname', edittype:'select', editoptions:{value:{1:'One',2:'Two'}} },
...
]
Run Code Online (Sandbox Code Playgroud)
但是现在当我加载我的数据时,我希望列"myname"包含值1.这对我来说不起作用,而是必须包含值"One".
这个问题是select元素的text-part在我的情况下本地化在动态生成colModel的业务层中.此外,通过EF 4生成数据的实体的数据类型可能不是字符串.然后我必须找到正确的本地化文本并操纵数据结果,以便列"myname"不包含整数,这通常是大小写,而是包含字符串而不是本地化文本.
您无法使用任何选项,以便当数据包含与选择列表中的选项匹配的值时,网格将找到该选项并显示文本.现在,网格将值显示为文本,首先当我单击编辑时,它会找到匹配选项并显示文本.当我撤消编辑时,它返回以再次显示该值.
我开始想到一个解决方案,这就是我想出来的.如果您知道更好的解决方案,或者您知道有内置选项,请随时回答.否则这就是我所做的:
loadComplete: function (data) {
var colModel = grid.getGridParam('colModel');
$.each(colModel, function (index, col) {
if (col.edittype === 'select') {
$.each(grid.getDataIDs(), function (index, id) {
var row = grid.getRowData(id);
var value = row[col.name];
var editoptions = col.editoptions.value;
var startText = editoptions.indexOf(value + ':') + (value + ':').length;
var endText = editoptions.indexOf(';', startText);
if (endText === -1) { endText = editoptions.length; }
var text = editoptions.substring(startText, …Run Code Online (Sandbox Code Playgroud) 我有Automapper的问题.我设置了一个测试窗体应用程序,下面是代码.另请查看每个MessageBox后的注释:
public class FirstClass
{
public string FirstProp { get; set; }
public IList<FirstClassChild> Children { get; set; }
}
public class FirstClassChild
{
public string FirstChildProp { get; set; }
}
public class SecondClass
{
public string FirstProp { get; set; }
public string SecondProp { get; set; }
public IList<SecondClassChild> Children { get; set; }
}
public class SecondClassChild
{
public string FirstChildProp { get; set; }
public string SecondChildProp { get; set; }
}
public partial class …Run Code Online (Sandbox Code Playgroud) 我正在尝试将带有文件上传的输入添加到我的应用程序中.
这是我的视图,有两个输入,一个文本和一个文件:
<template>
<form class="form-horizontal" submit.delegate="doImport()">
<div class="form-group">
<label for="inputLangName" class="col-sm-2 control-label">Language key</label>
<div class="col-sm-10">
<input type="text" value.bind="languageKey" class="form-control" id="inputLangName" placeholder="Language key">
</div>
</div>
<div class="form-group">
<label for="inputFile" class="col-sm-2 control-label">Upload file</label>
<div class="col-sm-10">
<input type="file" class="form-control" id="inputFile" accept=".xlsx" files.bind="files">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Do import</button>
</div>
</div>
</form>
</template>
Run Code Online (Sandbox Code Playgroud)
在我的webapi中,我有这个代码,我从这里复制并粘贴:
public class ImportLanguageController : ApiController
{
public async Task<HttpResponseMessage> Post()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw …Run Code Online (Sandbox Code Playgroud) c# ×3
javascript ×3
sql-server ×3
t-sql ×3
performance ×2
asp.net-mvc ×1
aurelia ×1
automapper ×1
clause ×1
deadlock ×1
file-upload ×1
form-submit ×1
git-tf ×1
http-post ×1
insert ×1
jqgrid ×1
linq ×1
list ×1
locking ×1
moq ×1
raphael ×1
reactjs ×1
select ×1
svg ×1
tfs ×1
unit-testing ×1
where ×1