我想执行这样的查询
var result = from entry in table
where entry.something == null
select entry;
Run Code Online (Sandbox Code Playgroud)
并得到一个IS NULL
生成.
编辑:在前两个答案后,我觉得有必要澄清我正在使用实体框架而不是Linq to SQL.object.Equals()方法似乎不适用于EF.
编辑2:上述查询按预期工作.它正确生成IS NULL
.然而,我的生产代码是
value = null;
var result = from entry in table
where entry.something == value
select entry;
Run Code Online (Sandbox Code Playgroud)
并且生成的SQL是something = @p; @p = NULL
.似乎EF正确地转换了常量表达式,但是如果涉及变量,它就像正常比较一样处理它.实际上是有道理的.我会结束这个问题
我需要找到2个优雅的完整实现
public static DateTime AddBusinessDays(this DateTime date, int days)
{
// code here
}
and
public static int GetBusinessDays(this DateTime start, DateTime end)
{
// code here
}
Run Code Online (Sandbox Code Playgroud)
O(1)优选(无环).
编辑:工作日我指的是工作日(周一,周二,周三,周四,周五).没有假期,只是周末排除在外.
我已经有一些似乎有效的丑陋解决方案,但我想知道是否有优雅的方法来做到这一点.谢谢
这就是我到目前为止所写的内容.它适用于所有情况,也会产生负面影响.仍然需要GetBusinessDays实现
public static DateTime AddBusinessDays(this DateTime startDate,
int businessDays)
{
int direction = Math.Sign(businessDays);
if(direction == 1)
{
if(startDate.DayOfWeek == DayOfWeek.Saturday)
{
startDate = startDate.AddDays(2);
businessDays = businessDays - 1;
}
else if(startDate.DayOfWeek == DayOfWeek.Sunday)
{
startDate = startDate.AddDays(1);
businessDays = businessDays - 1;
}
}
else
{
if(startDate.DayOfWeek …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在.NET中实现命名管道服务器.客户端将是C++.发送的数据的性质与问题无关.
我的第一个天真实现看起来像:
using (NamedPipeServerStream stream =
new NamedPipeServerStream(PipeName,
PipeDirection.InOut,
numberOfListeners,
PipeTransmissionMode.Message))
{
while (true)
{
try
{
stream.WaitForConnection();
var request = ReadRequest(stream);
var reply = Process(request);
WriteReply(stream, reply);
stream.WaitForPipeDrain();
}
catch (Exception ex)
{
//TO DO: log
}
}
}
Run Code Online (Sandbox Code Playgroud)
我接近这个吗?
当两个客户端同时打开连接时会发生什么?
他们会共享相同的流,数据会混合在一起吗?
我怎么能避免这个?
任何有关此想法或资源都会有所帮助.我对这个话题很陌生.
我读了这篇文章,我发现它很有趣.
总结那些不想阅读整篇文章的人.作者实现了一个名为Curry的高阶函数(由我重构而没有他的内部类):
public static Func<T1, Func<T2, TResult>>
Curry<T1, T2, TResult>(this Func<T1, T2, TResult> fn)
{
Func<Func<T1, T2, TResult>, Func<T1, Func<T2, TResult>>> curry =
f => x => y => f(x, y);
return curry(fn);
}
Run Code Online (Sandbox Code Playgroud)
这使我们能够采用像F(x,y)这样的表达式.
Func<int, int, int> add = (x, y) => x + y;
Run Code Online (Sandbox Code Playgroud)
并以F.Curry()(x)(y)方式调用它;
这部分我理解,我觉得它很酷,以一种令人讨厌的方式.我无法解决的问题是这种方法的实际用途.何时何地需要这种技术以及可以从中获得什么?
提前致谢.
编辑:在最初的3个响应之后,我理解增益将是在某些情况下,当我们从curried创建一个新函数时,一些参数不会被重新评估.我在C#中进行了这个小测试(请记住,我只对C#实现感兴趣,而不是一般的咖喱理论):
public static void Main(string[] args)
{
Func<Int, Int, string> concat = (a, b) => a.ToString() + b.ToString();
Func<Int, Func<Int, string>> concatCurry = concat.Curry();
Func<Int, string> curryConcatWith100 = (a) …
Run Code Online (Sandbox Code Playgroud) 我试图找到一种方法来升级我们的worklow运行时使用的程序集(自定义活动),同时仍然能够加载(反序列化)旧实例.我的情况是这样的:
CustomActivities
v.1.0.0.0 创建并保留工作流实例CustomActivities
v.2.0.0.0.0v.1和v.2之间的区别在于我们在程序集中有一些额外的类.现有类型的结构没有改变,所以我认为二进制反序列化仍然有效.我们使用AssemblyResolve
事件将所有类型从v.1重定向到v.2
if (args.Name.Contains("CustomActivities"))
{
Type someTypeFromCustomActivities = typeof(WorkflowType);
return someTypeFromCustomActivities.Assembly;
}
Run Code Online (Sandbox Code Playgroud)
然而,在反序列化过程中的某些时候,我们得到以下异常:
SerializationException:ID为153的对象实现了IObjectReference接口,无法解析所有依赖项.可能的原因是两个IObjectReference实例彼此相互依赖.
什么可能导致这种行为,我们如何解决它?此外,如果任何人都有升级工作流程的策略,不涉及并行运行并行程序集(同一应用程序域中的旧版本和新版本),他们将受到欢迎.
我们需要为客户端处理一些EDI消息,我想知道是否有人可以推荐一些可以完成任务的组件(不一定是免费的).我对能够将EDI消息解析为.NET结构和某种传输协议(SMTP,FTP,HTTP,AS2)等实现的框架感兴趣.
我正在尝试使用 GZipStream 编写一些应用程序跟踪(它们在生产中往往会增长到巨大的尺寸)。因此,在这种情况下,我需要能够打开现有文件并使用 GZipStream 附加到该文件。在我们尝试解压缩文件之前,一切似乎都运行良好。看起来,在解压缩时,GZipStream 仅读取第一个数据块,然后表现得就像达到了 EOF(即使文件包含更多数据)。奇怪的是,当使用 Windows 或 Winrar 打开文件时,所有数据似乎都存在并正确提取。以前有人遇到过这个问题吗?
我有一个Windows窗体应用程序,我想按需打开一个控制台(当我按下按钮时),我可以使用标准的控制台类进行交互.有没有办法做到这一点?
我目前正在使用此代码(来自其他用户)来查找列b1中的每个单元格并找到包含";"的单元格.像"你好;再见"之类的东西.代码将细胞分裂为";" 并将"再见"直接置于"你好"之下 在一个全新的行..
我现在需要的是......如果一个单元格包含多个 ";" (即"你好;再见;哟;嗨;嘿")它将在每个"分开"; 不只是第一个,然后将每个移动到另一个正下方的新行...
我需要做出哪些改变?
Dim r1 As Range, r2 As Range
Dim saItem() As String
For Each r1 In ActiveSheet.Range("B1", Cells(Application.Rows.Count, 2).End(xlUp))
If InStr(1, r1.Value2, ";") > 0 Then
saItem = Split(r1.Value2, ";")
r1 = Trim$(saItem(0)) & ";"
r1.Offset(1).EntireRow.Insert (xlDown)
r1.Offset(1) = Trim$(saItem(1))
End If
Next r1
Run Code Online (Sandbox Code Playgroud) 我有一些网格场景,我希望在ListView中显示> 500,000,000行.
如果我人为限制我的ListView显示100,000,000:
_listView.VirtualListSize = _data.Count;
if (_listView.VirtualListSize > 100000000)
_listView.VirtualListSize = 100000000;
Run Code Online (Sandbox Code Playgroud)
一切正常(自然在VirtualMode中).当我将我的代码更改为:
_listView.VirtualListSize = _data.Count;
if (_listView.VirtualListSize > 100000001)
_listView.VirtualListSize = 100000001;
Run Code Online (Sandbox Code Playgroud)
ListView显示一个空网格......这是一个Microsoft Bug吗?这是从哪里来的?这是Win32 ListView限制吗?最重要的是,为什么没有记录?
.net ×9
c# ×2
ado.net ×1
asp.net ×1
components ×1
compression ×1
console ×1
edi ×1
edifact ×1
excel ×1
excel-vba ×1
lambda ×1
listview ×1
named-pipes ×1
replace ×1
vba ×1
virtualmode ×1
x12 ×1