小编Adr*_*scu的帖子

如何在实体框架中查询空值?

我想执行这样的查询

   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正确地转换了常量表达式,但是如果涉及变量,它就像正常比较一样处理它.实际上是有道理的.我会结束这个问题

.net ado.net entity-framework

107
推荐指数
6
解决办法
10万
查看次数

AddBusinessDays和GetBusinessDays

我需要找到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#

85
推荐指数
4
解决办法
6万
查看次数

命名管道用法.多个客户端,一个服务器,多个并行请求

我正在尝试在.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)

我接近这个吗?

当两个客户端同时打开连接时会发生什么?

他们会共享相同的流,数据会混合在一起吗?

我怎么能避免这个?

任何有关此想法或资源都会有所帮助.我对这个话题很陌生.

.net named-pipes

15
推荐指数
1
解决办法
1万
查看次数

C#lambda - 咖喱用例

我读了这篇文章,我发现它很有趣.

总结那些不想阅读整篇文章的人.作者实现了一个名为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)

.net c# lambda

12
推荐指数
2
解决办法
6174
查看次数

使用新版本程序集加载以前版本的工作流程

我试图找到一种方法来升级我们的worklow运行时使用的程序集(自定义活动),同时仍然能够加载(反序列化)旧实例.我的情况是这样的:

  1. 使用CustomActivitiesv.1.0.0.0 创建并保留工作流实例
  2. 部署新版本的产品CustomActivitiesv.2.0.0.0.0
  3. 尝试在新运行时加载以前的工作流程

v.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实例彼此相互依赖.

什么可能导致这种行为,我们如何解决它?此外,如果任何人都有升级工作流程的策略,不涉及并行运行并行程序集(同一应用程序域中的旧版本和新版本),他们将受到欢迎.

.net workflow-foundation

10
推荐指数
1
解决办法
920
查看次数

.NET EDIFACT/X12框架

我们需要为客户端处理一些EDI消息,我想知道是否有人可以推荐一些可以完成任务的组件(不一定是免费的).我对能够将EDI消息解析为.NET结构和某种传输协议(SMTP,FTP,HTTP,AS2)等实现的框架感兴趣.

.net components edi x12 edifact

8
推荐指数
1
解决办法
5961
查看次数

ASP.NET Page.OnLoad执行两次

任何人都知道Page.OnLoad()在ASP.NET生命周期中执行两次的时间和原因是什么?

asp.net

7
推荐指数
1
解决办法
2381
查看次数

使用 GZipStream 附加到压缩文件

我正在尝试使用 GZipStream 编写一些应用程序跟踪(它们在生产中往往会增长到巨大的尺寸)。因此,在这种情况下,我需要能够打开现有文件并使用 GZipStream 附加到该文件。在我们尝试解压缩文件之前,一切似乎都运行良好。看起来,在解压缩时,GZipStream 仅读取第一个数据块,然后表现得就像达到了 EOF(即使文件包含更多数据)。奇怪的是,当使用 Windows 或 Winrar 打开文件时,所有数据似乎都存在并正确提取。以前有人遇到过这个问题吗?

.net compression

5
推荐指数
1
解决办法
2372
查看次数

有没有办法从WinForms/WPF应用程序启动/打开控制台?

我有一个Windows窗体应用程序,我想按需打开一个控制台(当我按下按钮时),我可以使用标准的控制台类进行交互.有没有办法做到这一点?

.net console

2
推荐指数
1
解决办法
3956
查看次数

在Excel中拆分字符串(vba)

我目前正在使用此代码(来自其他用户)来查找列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)

excel vba replace excel-vba

2
推荐指数
1
解决办法
4万
查看次数

VirtualMode中的WinForms ListView是否限制为100,000,000行?

我有一些网格场景,我希望在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 listview virtualmode

1
推荐指数
1
解决办法
975
查看次数