我现在正在学习C++,因为我需要编写一些低级程序.
当我了解"auto"关键字时,它会从C#中提醒我"var"关键字.
那么,C#"var"和C++"auto"的区别是什么?
我注意到甚至比使用GroupBy的更简单的LINQ查询也被转换为与组密钥一样多的SQL查询.我没有找到任何解释为什么会发生这种情况或我如何避免它.
例如,查询:
from p in People group p by p.Name into g select g
Run Code Online (Sandbox Code Playgroud)
被翻译成selects
列的不同值Name
,就像这个:
-- Region Parameters
DECLARE @x1 VarChar(20) SET @x1 = 'John'
-- EndRegion
SELECT [t0].[Name], [t0].[SurName]
FROM [People] AS [t0]
WHERE ((@x1 IS NULL) AND ([t0].[Name] IS NULL))
OR ((@x1 IS NOT NULL) AND ([t0].[Name] IS NOT NULL) AND (@x1 = [t0].[Name]))
GO
Run Code Online (Sandbox Code Playgroud)
但是,如果我把整个表带到内存中,比如调用AsEnumerable()
,
from p in People.AsEnumerable() group p by p.Name into g select g
Run Code Online (Sandbox Code Playgroud)
只发出一个select,检索所有行,然后LINQ在内存中执行分组.
我发现这种行为相当混乱和容易出错,因为我经常发现自己在不同的语句中编写复杂的查询,我必须小心地调用AsEnumerable
或 …
我需要自动化 Cisco VPN 客户端版本 5.0.07.0440 的登录过程。我尝试过使用这样的命令行,但有问题:
vpnclient.exe connect MyVPNConnection user username pwd password
Run Code Online (Sandbox Code Playgroud)
这将启动连接,但随后会显示“用户身份验证”对话框,询问用户名、密码和域。用户名和密码已填写,不需要域。
要继续,我必须按“确定”按钮。
有没有办法不显示对话框并自动登录VPN?
鉴于此代码:
static void Main(string[] args)
{
Expression<Func<SomeDerivedClass, object>> test = i => i.Prop;
var body = (UnaryExpression) test.Body;
Console.WriteLine(((MemberExpression) body.Operand).Member.ReflectedType);
}
public class SomeClass
{
public int Prop { get; private set; }
}
public class SomeDerivedClass : SomeClass
{
}
Run Code Online (Sandbox Code Playgroud)
我希望ReflectedType是SomeDerivedClass,因为它是表达式的参数类型.但它是SomeClass,如果我理解正确的话 - 声明类型.
这是为什么?
我正在考虑在 XAML 中使用 C# 6 字符串插值的方法,例如在一些简单的场景中使用它们而不是值转换器,例如在绑定到数字时用空字符串替换零。
从它的设计讨论:
内插字符串是一种构造字符串(或 IFormattable)类型值的方法,方法是将字符串的文本与将填充字符串中的“漏洞”的表达式一起写入。编译器根据内插字符串构造格式字符串和填充值序列。
但是,正如我怀疑的那样,它们似乎无法从 XAML 中使用,因为它使用不同的编译器来生成 BAML,而且我在生成的.g.i.cs
文件中找不到字符串的踪迹。
在编写LINQ to SQL查询以优化或加速LINQ to SQL时,我们可以记住哪些常见的事情?
例如,通常,LINQ to SQL必须在每次执行查询时将LINQ查询转换为SQL; 这涉及在几个阶段中递归构成查询的表达式树.我们所做的就像使用CompiledQuery
类预编译查询一样.
我正在使用Serilog作为我的日志框架(Seq作为我的日志接收器).记录异常时,我使用的是:
log.Error(ex, "Operation Failed");
Run Code Online (Sandbox Code Playgroud)
我的应用程序大量使用async/await方法.当发生未处理的异常时,堆栈跟踪很难读取.有一个nuget包可以清理异步堆栈跟踪(https://github.com/aelij/AsyncFriendlyStackTrace).这将创建一个扩展方法,使您可以访问已修改/清除的堆栈跟踪:
ex.ToAsyncString()
Run Code Online (Sandbox Code Playgroud)
我希望能够使用此库在写入Seq之前拦截堆栈跟踪,而是记录清理/修改的堆栈跟踪.
是否有一种方法可以使用Serilog/Seq来控制发送到日志接收器的错误字符串的确切输出?
我有其结合性质的视图模型3个文本框的视图SupplierName
,Contact
,Address
结合并一个键SearchCommand
场所在我的视图模型.
我的要求是Supplier
根据上述属性过滤记录.我使用了EntityFramework.
用户可以输入任何上述文本框,这些文本框会导致我编写9个不同的查询.例如,如果用户仅在SupplierName
文本框上输入数据,那么我需要使用SupplierName
as参数运行一个查询.如果用户输入SupplierName
和Contact
文本框,那么我需要运行另一个查询.等等.
这是我的代码:
public IEnumerable<Model.Supplier> GetAllSuppliersBySearch(string nameMatch, string contactMatch, string phoneMatch)
{
if(nameMatch!=null)
{
var q = from f in Context.Suppliers
where f.SupplierName==nameMatch
select f;
}
else if(contactMatch!=null)
{
var q = from f in Context.Suppliers
where f.ContactName==contactMatch
select f;
}
else if(phoneMatch!=null)
{
var q = from f in Context.Suppliers
where f.ContactName==contactMatch
select f;
}
return q.AsEnumerable();
}
Run Code Online (Sandbox Code Playgroud)
而不是编写多个查询,如何使用一个查询或以任何优化的方式完成此操作?
我正在尝试创建一个MSMQ解决方案,并且对于某些消息,我希望它们仅在下午6点后处理,所以在MSMQ中有一种方法可以在Future中处理消息吗?