我遇到了一些dbml生成的类,这些类无法解析为高效的SQL.想象一下,我有一个Accounts表和一个Transactions表,其中每个事务都与一个特定的帐户相关联.我将所有这些加载到dbml中,并弹出一个Account类和一个Transaction类.Account类具有对一组事务的EntitySet引用,这些事务表示该帐户上的所有事务.很公平.
现在假设我只想要当前会计期间的交易.所以我添加一个这样的方法:
public IEnumerable<Transaction> CurrentTransactions
{
get
{
DateTime dtStart = CurrentPeriod;
DateTime dtEnd = NextPeriod;
return
from t in Transactions
orderby t.date
where t.date >= CurrentPeriod && t.date <= NextPeriod
select t;
}
}
Run Code Online (Sandbox Code Playgroud)
看起来很好,它的工作原理,但SQL不好:
SELECT [t0].[id], [t0].[account_id], [t0].[date], [t0].[description], [t0].[amount], [t0].[sign]
FROM [dbo].[transactions] AS [t0]
WHERE [t0].[account_id] = @p0
Run Code Online (Sandbox Code Playgroud)
即:它将整个事务集拉下来并使用LINQ for Objects处理它.我已经尝试取出where子句,orderby子句,用常量替换日期,它仍然是客户端完成的.
为了比较,我尝试直接从数据上下文调用Transactions集合:
DateTime dtStart = account.CurrentPeriod;
DateTime dtEnd = account.NextPeriod;
IEnumerable<Transaction> trans=
from t in MyDataContext.Transactions
orderby t.date
where t.date >= dtStart && t.date <= dtEnd && …Run Code Online (Sandbox Code Playgroud) 我已经使用SQL多年了,但很少有更简单的插入和选择等...所以我不是SQL专家.我想知道我是否可以帮助优化我在SQLite上执行的更复杂的SQL语句,从PHP到PDO.
声明似乎工作正常,似乎需要更长的时间,我预期(或者我可能只是期望太多).
这是SQL:
INSERT OR IGNORE INTO MailQueue(SubscriberID, TemplateID)
SELECT Subscribers.ID, '1' AS TemplateID
FROM Subscribers
INNER JOIN SubscriberGroups ON Subscribers.ID=SubscriberGroups.SubscriberID
WHERE SubscriberGroups.GroupID IN ('1', '2', '3')
AND Subscribers.ID NOT IN
(
SELECT Subscribers.ID FROM Subscribers
INNER JOIN SubscriberGroups ON Subscribers.ID=SubscriberGroups.SubscriberID
WHERE SubscriberGroups.GroupID IN ('4', '5', '6')
);
Run Code Online (Sandbox Code Playgroud)
我得到的是一个或多个组中的订阅者列表.我想将订阅者添加到邮件队列中,选择属于一个或多个组(1,2,3)的订阅者,但排除那些也在另一组组中的订阅者(4,5,6).
首先,是上面的SQL典型的如何做到这一点?
其次,我应该有什么指标尽可能有效地完成这项工作?
目前,在平均规格LAMP上通过大约5000个订户记录(以及少数几个组)需要大约30秒.
在一天结束时,表现并不是那么重要,但我想更好地理解这些东西,所以任何见解都非常受欢迎.
布拉德
我试图让我们的构建脚本(使用MSBuild)在Vista上正常工作,并且我发现将注册输出(在链接器选项中)选项设置为True的项目无法从命令行构建,如下所示:
项目:错误PRJ0050:无法注册输出.请尝试启用每用户重定向或使用提升的权限从命令提示符注册该组件.
虽然我可以轻松地为一台机器修复此问题,但可以通过运行管理员或任何我希望构建脚本为任何开发机器"正常工作".
即使刚刚注册失败但是继续构建也会令人满意.有什么建议?
布拉德
我最近在另一篇文章中看到了这段代码(jQuery在文本区域中设置光标位置)
new function($) {
$.fn.setCursorPosition = function(pos) {
// function body omitted, not relevant to question
}
} (jQuery);
Run Code Online (Sandbox Code Playgroud)
经过太长时间试图理解它在做什么后,我终于发现它只是用参数$创建一个新函数,然后用jQuery作为参数值调用它.
实际上,它只是这样做:
jQuery.fn.setCursorPosition = function(pos) {
// function body omitted, not relevant to question
}
Run Code Online (Sandbox Code Playgroud)
原始的,更令人困惑的版本是什么原因?
我正在尝试将OpenTK Matrix4传递给着色器制服,但GL.UniformMatrix4似乎没有合适的过载.重载接受float或者float[]或ref float.类似地,我找不到将Matrix4实例转换为float数组的方法 - 我已经看到一个在Matrix4上使用ToArray方法的示例,但这似乎不存在于我正在使用的发行版中.
当然,我遗漏了一些简单的东西,因为这对于将模型/视图/投影矩阵传递给着色器非常重要.
我正在使用最新版本的MonoTouch的OpenTK版本.
当我发布我的项目时
dotnet publish
它输出到一个文件夹
bin/Debug/dnxcore50/osx.10.11-x64/publish
(或者可能是Release等价物)
是否可以为project.json文件中指定的postpublish脚本确定此文件夹位置?
我正在将一些代码从 .NET (4.5) 移动到 .NET Core (2) 并且有一个像这样的多目标项目......
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;netcoreapp2.0</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)
代码库使用CopyMemory来自 kernel32的 Win32 API 函数,但我发现我需要根据我的目标框架使用不同的入口点名称。
#if NET45
[DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
#else
[DllImport("kernel32.dll", EntryPoint = "RtlCopyMemory", SetLastError = false)]
#endif
public static extern void CopyMemory(IntPtr dest, IntPtr src, IntPtr count);
Run Code Online (Sandbox Code Playgroud)
我会认为这一切都比 .NET 低
所以,问题是……为什么?
MySQL SQL命令可以包含以"@"开头的用户变量.
MySQL ADO.NET连接器也使用'@'作为命令参数.
有没有办法逃避'@'字符,所以我可以在通过ADO.NET发送到MySQL的SQL语句中使用用户变量?
我正在尝试做这样的事情:
UPDATE company
SET next_job_id = @jobid:=next_job_id+1
WHERE company_id = @companyid;
SELECT @jobid;
Run Code Online (Sandbox Code Playgroud)
其中@jobid是MySQL用户变量,而@companyid是参数.
刚开始使用Sequelize并试图让迁移工作,并希望看到迁移实际上针对数据库运行的SQL.
我发现了一个github注释,建议如何将日志记录传递给调试模块,但是我在哪里放置"选项".
options: {
logging: debug('sequelize')
}
Run Code Online (Sandbox Code Playgroud) 我正在使用msys-git并注意到在执行git pull之后我经常在输出中得到奇怪的字符.我认为这些是某些终端可能理解的某种控制字符,但在标准的Windows命令提示符下,它们会导致:
Source/MidiLib/AudioChannelMixer.cpp ?[m | 6 ?[32m+?[m
Source/MidiLib/AudioEnvironment.cpp ?[m | 4 ?[32m+?[m
Source/MidiLib/EventIDs.h ?[m | 1 ?[32m+?[m
Source/MidiLib/MidiAssignable.cpp ?[m | 207 ?[32m+++++++++++++++++++++++++?[m?[31m---?[m
Source/MidiLib/MidiAssignable.h ?[m | 39 ?[32m+++++?[m?[31m-?[m
Source/MidiLib/MidiAssignmentsDlg.cpp ?[m | 101 ?[32m++++++++++++?[m?[31m--?[m
Run Code Online (Sandbox Code Playgroud)
这不是一个真正的问题,但很烦人......是否有办法禁用这些字符并获得干净的输出?
是否有一种简单的方法可以在NSStrings的NSArray中进行不区分大小写的查找?NSArray的参考文献提到对案例不敏感,但没有提及查找.
我可以轻松地编写我自己的fn来做它,但想知道是否有更简单的方法.
我正在努力更好地了解蓝牙LE,并一直在玩iOS和Android的蓝牙堆栈和各种信标(StickNFind,Estimote等......)
很公平,除了我试图使用CoreBluetooth(即:非位置服务)从iBeacon读取广告数据,并注意到iOS似乎剥离了iBeacon设备的制造商特定广告数据.
我意识到我应该使用Apple批准的方法来检测iBeacons,但它并不适合我们的用例,并想知道是否有办法解决它.
.net ×1
.net-core ×1
ado ×1
ado.net ×1
bluetooth ×1
coreclr ×1
dnx ×1
dotnet-cli ×1
git ×1
ibeacon ×1
ios ×1
iphone ×1
javascript ×1
jquery ×1
linq ×1
linq-to-sql ×1
msbuild ×1
msysgit ×1
mysql ×1
nsarray ×1
objective-c ×1
opengl-es ×1
opentk ×1
pinvoke ×1
regsvr32 ×1
sequelize.js ×1
sql ×1
sqlite ×1
windows ×1
xamarin.ios ×1