如何进行递归搜索?

我有一个Task类,它可以有相同类型的子任务 public class Task { public DateTime Start { get; set;} public DateTime Finish { get; set;} public List Tasks {get; set;} public DateTime FindTaskStartDate(Task task) {} } 我应该如何执行递归搜索(也许linq)以找到具有最早开始日期的任务? 我最初的方法涉及太多的循环,它结束了一点点混乱,并迅速失控。 这是我的第二次尝试: public DateTime FindTaskStartDate(Task task) { DateTime startDate = task.Start; if(task.HasSubTasks()) { foreach (var t in task.Tasks) { if (t.Start < startDate) { startDate = […]

在LINQ中组合多个表

我有一个非常简单的SQL查询 Select r.SpaceID,Count(*), SpaceCode from Rider r join Spaces s on r.SpaceID=s.SpaceID Group By r.SpaceID, s.SpaceCode 请注意我的group by子句在多个表上,我想在linq中做同样的事情,我知道如何对单个表进行分组,但是关于多个表我不知道。

为什么要使用Dapper? 任何人都可以评论Dapper Vs ADO.NET优点和缺点

我想了解一个人真的需要考虑使用Dapper的时间。 另外,我想了解比较Dapper Vs ADO.NET的优点和缺点

MVC 3压缩filter导致输出乱码

所以,我有一个名为CompressAttribute的自定义属性,它被设置为global.asax中的全局filter。 它使用reflection来检查当前操作方法的返回类型,如果它是“ViewResult”,它使用GZip或Deflate压缩输出。 它工作得很好,除非页面抛出500服务器错误。 如果遇到错误,而不是显示.NET错误页面,我得到一堆: `我%/米{JJT 显然它正在尝试编码导致问题的500 Server Error页面。 处理这个问题的最佳方法是什么? 这是filter代码: public override void OnActionExecuting(ActionExecutingContext filterContext) { MethodInfo actionMethodInfo = Common.GetActionMethodInfo(filterContext); if (GetReturnType(actionMethodInfo).ToLower() != “viewresult”) return; HttpRequestBase request = filterContext.HttpContext.Request; string acceptEncoding = request.Headers[“Accept-Encoding”]; if (string.IsNullOrEmpty(acceptEncoding)) return; acceptEncoding = acceptEncoding.ToUpperInvariant(); HttpResponseBase response = filterContext.HttpContext.Response; if (acceptEncoding.Contains(“GZIP”)) { response.AppendHeader(“Content-encoding”, “gzip”); response.Filter = new WebCompressionStream(response.Filter, CompressionType.GZip); } else […]

从Active Directory获取所有直接报告

我试图通过递归方式通过Active Directory获取用户的所有直接报告。 因此,给定一个用户,我将得到一个列表,其中列出了所有将此人作为经理或者有一个人作为经理的人,他有一个人作为经理…最终将输入用户作为经理。 我目前的尝试相当缓慢: private static Collection GetDirectReportsInternal(string userDN, out long elapsedTime) { Collection result = new Collection(); Collection reports = new Collection(); Stopwatch sw = new Stopwatch(); sw.Start(); long allSubElapsed = 0; string principalname = string.Empty; using (DirectoryEntry directoryEntry = new DirectoryEntry(string.Format(“LDAP://{0}”,userDN))) { using (DirectorySearcher ds = new DirectorySearcher(directoryEntry)) { ds.SearchScope = SearchScope.Subtree; ds.PropertiesToLoad.Clear(); […]

在.Net native中的线程池上运行异步任务的性能很差

我发现托管vs .Net本机代码有一个奇怪的区别。 我有一个繁重的工作重定向到线程池。 当在托管代码中运行应用程序时,一切都运行顺畅,但是一旦我打开本机编译 – 任务运行速度慢几十倍,以至于它挂起UI线程(我猜CPU是如此过载)。 以下是调试输出的两个屏幕截图,左侧的屏幕截图来自托管代码,右侧的屏幕截图来自本机编译。 正如您所看到的,UI任务所消耗的时间在两种情况下几乎相同,直到启动线程池作业时 – 然后在托管版本中UI经过的时间增长(实际上UI被阻止而您无法采取任何操作)。 线程池工作的时间不言自明。 重现问题的示例代码: private int max = 2000; private async void UIJob_Click(object sender, RoutedEventArgs e) { IProgress progress = new Progress((p) => { MyProgressBar.Value = (double)p / max; }); await Task.Run(async () => { await SomeUIJob(progress); }); } private async Task SomeUIJob(IProgress progress) { Stopwatch watch […]

DynamicMethod比编译的IL函数慢得多

我写了一个复制公共属性的简单对象复制器。 我无法弄清楚为什么Dynamic方法比c#版本慢得多。 持续时间 C#方法:4,963毫秒 动态方法:19,924毫秒 请注意 – 当我在启动秒表之前运行动态方法时 – 持续时间不包括编译阶段。 我在调试和发布模式下,在x86和x64模式下运行,从VS和命令行运行,结果大致相同(动态方法慢400%)。 const int NBRECORDS = 100 * 1000 * 1000; public class Person { private int mSomeNumber; public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } public int SomeNumber { get { return […]

这里的每个人都跳上了ORM乐队的旅行车吗?

Microsoft Linq to SQL,Entity Framework(EF)和nHibernate等都提议将ORMS作为下一代数据映射技术,并声称它们轻量级,快速且简单。 例如刚刚在VS杂志上发表的这篇文章: http://visualstudiomagazine.com/features/article.aspx?editorialsid=2583 谁都对在项目中实施这些技术感到兴奋? 这些技术的创新在哪里使它们比以前的产品更加优秀?

为什么WPF中的依赖项属性必须是静态的

为什么依赖属性必须是静态的? 我已经看到它已经在这里的一些post中被问过,但我无法正确理解它。 如果有人能用小片段帮助我理解,那将是很棒的。

关于ASP.NET表单身份validation和会话的滑动到期

我们有一个使用本机表单身份validation和会话function的ASP.NET 4.5 WebForms应用程序。 滑动到期时两者都超时20分钟。 想象一下以下场景。 用户已经在我们的应用程序中工作了一段时间,然后继续做其他事情,让我们的应用程序闲置20分钟。 然后,用户返回我们的应用程序以编写报告。 但是,当用户尝试保存时,他/她将使用登录屏幕进行处理,并且报告将丢失。 显然,这是不需要的。 我们希望在身份validation或会话过期时将浏览器重定向到登录页面,而不是这种情况。 为了实现这一点,我们构建了一个Web Api服务,可以调用它来检查是否是这种情况。 public class SessionIsActiveController : ApiController { /// /// Gets a value defining whether the session that belongs with the current HTTP request is still active or not. /// /// True if the session, that belongs with the current HTTP request, is still active; […]