为什么以下编译?
public IList<T> Deserialize<T>(string xml)
{
if (typeof(T) == typeof(bool))
return (IList<T>)DeserializeBools(xml);
return null;
}
private static IList<bool> DeserializeBool(string xml) { ... do stuff ... }
Run Code Online (Sandbox Code Playgroud)
但事实并非如此
public MyClass<T> GetFromDb<T>(string id)
{
if (typeof(T) == typeof(bool))
return (MyClass<T>)GetBoolValue(id); <-- compiler error here
return null;
}
private static MyClass<bool> GetBoolValue(string id) { ... do stuff ... }
Run Code Online (Sandbox Code Playgroud) 我有一个SQL查询,大约需要30秒才能返回1条记录.当使用此记录的BrandId运行时,CROSS APPLY中使用的函数是即时的.
SELECT
b.BrandId,
b.Name,
ah.Type,
c.ContactEmails,
c.ContactNumbers,
c.ContactLinks
FROM
@IdsToFilterBy ids
JOIN dbo.AccountHandler ah ON ah.AccountHandlerId = ids.Id
JOIN dbo.Brand b ON ah.RepresentedByBrandId = b.BrandId
CROSS APPLY dbo.[fn_GetBrandContactDetails](b.BrandId) AS c
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是更改表格,我会从CROSS APPLY获得BrandId.
SELECT
b.BrandId,
b.Name,
ah.Type,
c.ContactEmails,
c.ContactNumbers,
c.ContactLinks
FROM
@IdsToFilterBy ids
JOIN dbo.AccountHandler ah ON ah.AccountHandlerId = ids.Id
JOIN dbo.Brand b ON ah.RepresentedByBrandId = b.BrandId
CROSS APPLY dbo.[fn_GetBrandContactDetails](ah.RepresentedByBrandId) AS c <-- change here
Run Code Online (Sandbox Code Playgroud)
查询现在只需2秒即可运行.当我加入时,dbo.Brand b ON cah.RepresentedByBrandId = b.BrandId我希望它们是一样的.
有人可以解释为什么巨大的性能差异?
UPDATE
不同之处在于,当我使用b.BrandId和整个AccountHandler表时,当我使用ah.RepresentedByBrandId时,CROSS APPLY在整个Brand表上运行.AccountHandler表相当小.
但是我期待CROSS APPLY仅在JOIN的结果上运行,这是一条记录.这是可能的还是我错过了解CROSS APPLY?
我注意到linq和Contains方法有些奇怪.似乎对哪个Contains方法调用感到困惑.
if (myString.Contains(strVar, StringComparison.OrdinalIgnoreCase))
{
// Code here
}
Run Code Online (Sandbox Code Playgroud)
上面的代码无法编译,并出现以下错误:
无法从用法中推断出方法'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable,TSource,System.Collections.Generic.IEqualityComparer)'的类型参数.尝试显式指定类型参数.
如果我删除使用linq语句,它很满意包含(但刹车所有的linq代码).
告诉编译器我想使用String.Contains方法而不是Linqs的正确语法是什么?
干杯
我在SQL Server中有一个二进制字段,我想在SQL函数中读取一个字节.在代码中我会使用一个字节数组.SQL中是否有等价物?
谷歌找不到任何东西.
我们使用二进制(16)字段来存储IP地址.我们这样做,因为它可以容纳IPv4和IPv6地址,并且很容易与.Net IPAddress类一起使用.
但是,我创建了以下SQL函数来将二进制地址转换为IP地址字符串以进行报告.
CREATE FUNCTION fn_ConvertBinaryIPAddressToString
(
@binaryIP binary(16)
)
RETURNS nvarchar(39)
AS
BEGIN
DECLARE @ipAsString nvarchar(39)
-- Is IPv4
IF (substring(@binaryIP, 5, 1) = 0x00) <-- Is there a better way?
BEGIN
SELECT @ipAsString = CAST(CAST(substring(@binaryIP, 1, 1) AS int) AS nvarchar(3)) + '.' +
CAST(CAST(substring(@binaryIP, 2, 1) AS int) AS nvarchar(3)) + '.' +
CAST(CAST(substring(@binaryIP, 3, 1) AS int) AS nvarchar(3)) + '.' +
CAST(CAST(substring(@binaryIP, 4, 1) AS int) AS nvarchar(3))
END
ELSE
BEGIN
-- Is IPv6
-- …Run Code Online (Sandbox Code Playgroud) 我试图迫使Linq在两个表之间进行内连接.我举个例子.
CREATE TABLE [dbo].[People] (
[PersonId] [int] NOT NULL,
[Name] [nvarchar](MAX) NOT NULL,
[UpdatedDate] [smalldatetime] NOT NULL
... Other fields ...
)
CREATE TABLE [dbo].[CompanyPositions] (
[CompanyPositionId] [int] NOT NULL,
[CompanyId] [int] NOT NULL,
[PersonId] [int] NOT NULL,
... Other fields ...
)
Run Code Online (Sandbox Code Playgroud)
现在我正在使用不寻常的数据库,因为有一个我无法控制的原因,人们在People表中丢失但在CompanyPositions中有记录.我想通过加入表来过滤掉缺少人员的CompanyPositions.
return (from pos in CompanyPositions
join p in People on pos.PersonId equals p.PersonId
select pos).ToList();
Run Code Online (Sandbox Code Playgroud)
Linq认为此连接是冗余的,并将其从它生成的SQL中删除.
SELECT
[Extent1].[CompanyPositionId] AS [CompanyPositionId],
[Extent1].[CompanyId] AS [CompanyId],
....
FROM [dbo].[CompanyPositions] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)
然而,在我的情况下,这并不是多余的.我可以像这样解决它
// The min date check will always …Run Code Online (Sandbox Code Playgroud) 我已经在我的iPhone应用程序代码中跟踪了一个问题,因为viewDidAppear方法并不总是触发.当您启动应用程序时,事件将按预期触发.但是,如果我使用能够进行多任务处理并重新打开的手机关闭应用程序.我的viewDidAppear事件不再触发.
我的视图是从Nibs加载的,我使用viewDidUnload来清理(释放和零所有出口).我的视图嵌套在侧面和标签栏然后导航控制器.当nib重新加载时,我看起来事件没有正确连线.我对错误/遗失的错误以及如何解决这个问题有所了解吗?
提前致谢.
更新我并不是说应用程序第一次进入前台时不会触发事件.我的意思是这个事件再也不会发生了.即使在标签之间切换或通过导航视图移动也是如此.
例:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"viewDidAppear called");
}
Run Code Online (Sandbox Code Playgroud)
此代码放在两个视图中,每个视图位于不同的选项卡上.每次我在选项卡之间交换"viewDidAppear called"都会写入日志.当我关闭并重新打开应用程序并在标签之间切换时,不再发生这种情况.其他按钮事件正常启动.
我是 git 新手,目前正在考虑从 mercurial 移植一些大型项目。我们有一个根项目,它只包含对所有外部项目(git 中的子模块)的引用。我正在尝试在 git 中重新创建它。
我已经将一个项目 (foo) 导入到 gitib 中。我创建了一个新的空项目(root)并将其克隆到本地。我想使用添加 Foo 作为子模块
git submodule add https://github.com/.../foo.git
Run Code Online (Sandbox Code Playgroud)
来自 /c/Work/GitHub/root (master)
但我不断收到“请确保 .gitmodules 文件在工作树中”。
查看文档,此命令的第一次运行应创建 .gitmodules 文件,但即使我手动创建它也会收到此错误。在谷歌上寻找这个错误只会返回带有错误的源文件,但没有解释为什么我会得到它。我认为这只是我对 git 的了解不足。
我做错了什么?
编辑:我也试过。
mkdir test
cd test
git init
git submodule add https://github.com/.../foo.git
Run Code Online (Sandbox Code Playgroud)
我犯了同样的错误。
我有一个返回HTML片段的ajax调用.我试图在渲染之前选择该片段中的div.
HTML的一个例子:
<div class="event-detail repBy-container">
<div class="copy">.....</div>
<div class="links">
....
</div>
<div class="contacts">
<div class="name-brand">....</div><div class="details">...., <a href="mailto:...@....">...</a></div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
现在的问题是:
function ajaxReturn(data) {
alert($(data).find('.event-detail').length); <-- Returns 0
alert($(data).find('.copy').length); <-- Returns 1
}
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我做错了什么?
我正在使用1.0.0-beta7 x64,但视觉工作室坚持认为我使用的是x86.当我删除所有我的运行时,除了我定位的那个,我得到这个:
我在项目的任何地方都找不到对x86的引用.
当我将鼠标悬停在解决方案DNX SDK版本上时,它会显示x86版本,但我不知道它是从哪里获得的.目前这不会导致任何问题,我只是想了解发生了什么.
c# ×4
sql ×4
sql-server ×3
linq ×2
asp.net ×1
asp.net-core ×1
cocoa-touch ×1
dnx ×1
events ×1
generics ×1
git ×1
ios ×1
ipad ×1
iphone ×1
javascript ×1
jquery ×1
linq-to-sql ×1