Tag: linq

为什么在排序中使用Random导致

我尝试使用任一代码来改组字节(List)列表: myList.Sort((a, b) => this._Rnd.Next(-1, 1)); 要么 myList.Sort(delegate(byte b1, byte b2) { return this._Rnd.Next(-1, 1); }); 他们抛出以下错误: 无法排序,因为IComparer.Compare()方法返回不一致的结果。 要么值不等于自身,要么重复一个值与另一个值进行比较会产生不同的结果。 x:'{0}’,x的类型:'{1}’,IComparer:'{2}’。 使用随机而不是字节的比较函数有什么问题? 我尝试使用LINQ函数,它的工作原理。 var myNewList = myList.OrderBy(s => Guid.NewGuid()); var myNewList = myList.OrderBy(s => this._Rnd.NextDouble()); 我确实读过这些方法比Fisher-Yates shuffle慢,只给O(n)运行时。 但只是想知道使用Sort函数和随机。

在ASP.NET MVC中将多个参数传递给控制器​​; 另外,在LINQ-to-SQL中生成即时查询

我正在研究一个基本的问题管理系统,以便学习ASP.NET MVC。 我已经把它运行到相当不错的水平,但我遇到了一个问题。 我有一个名为Issue的控制器,其视图名为Open。 / Issue / Open列出当前系统上记录的所有未解决问题。 我已经定义了这样的路线: routes.MapRoute( “OpenSort”, // Route name “Issue/Open/{sort}”, // URL with parameters new { controller = “Issue”, action = “Open”, sort = “TimeLogged” } // Parameter defaults ); 到目前为止,这是正常工作,使用IssueController.cs中的以下代码: public ActionResult Open(string sort) { var Issues = from i in db.Issues where i.Status == “Open” orderby i.TimeLogged ascending […]

在Linq查询中调用方法

我想在我的表中插入一个名为“S”的列,它将根据从表列获取的值获取一些字符串值。 例如: for each ID (az)我想得到它的字符串值存储在另一个表中。 字符串值从另一个通过Linq查询获取它的方法返回。 是否可以从Linq调用方法? 我应该在同一个查询中做所有事情吗? 这是我需要获得的信息的结构: az是表#1中第一个方块中的ID,从这个ID我得到表#2中的另一个id,从中我可以得到我需要在列’S’下显示的字符串值。 var q = (from a in vA join b in vB on ai equals bj where ak == “aaa” && ah == 0 select new {T = ai, S = someMethod(az).ToString()}) return q; 行S = someMethod(az).ToString()导致以下错误: 无法将类型为“System.Data.Linq.SqlClient.SqlColumn”的对象强制转换为“System.Data.Linq.SqlClient.SqlMethodCall”。

如何查找当前用户具有WriteProperty访问权限的ActiveDirectory中的所有组?

目前,我想在Active Directory中查找当前用户具有正确WriteProperty的所有组。 问题是我可以找到直接插入用户的所有组,但是当用户在一个组内并且该组具有写访问权限时,它将不会显示。 我认为设置GetAccessRules()的布尔值会有所帮助,但事实并非如此。 所以这是我已经拥有的代码: var identity = WindowsIdentity.GetCurrent().User; var allDomains = Forest.GetCurrentForest().Domains.Cast(); var allSearcher = allDomains.Select(domain => { var searcher = new DirectorySearcher(new DirectoryEntry(“LDAP://” + domain.Name)); //Apply some filter to focus on only some specfic objects searcher.Filter = “(&(objectClass=group)(name=*part_of_group_name*))”; return searcher; }); var itemsFound = allSearcher .SelectMany(searcher => searcher.FindAll() .Cast() .Select(result => result.GetDirectoryEntry())); var […]

使用LINQ进行高效的图遍历 – 消除递归

今天,我将实现一种方法来遍历任意深度的图形并将其展平为单个可枚举的图形。 相反,我先做了一点搜索,发现了这个: public static IEnumerable Traverse(this IEnumerable enumerable, Func<T, IEnumerable> recursivePropertySelector) { foreach (T item in enumerable) { yield return item; IEnumerable seqRecurse = recursivePropertySelector(item); if (seqRecurse == null) continue; foreach (T itemRecurse in Traverse(seqRecurse, recursivePropertySelector)) { yield return itemRecurse; } } } 从理论上讲,这看起来不错,但实际上我发现它比使用等效的手写代码(如果出现的情况)执行图表并做任何需要做的事情要差得多。 我怀疑这是因为在这种方法中,对于它返回的每个项目,堆栈必须放松到某个任意深度的水平。 我还怀疑如果递归被消除,这种方法会更有效地运行。 我也碰巧不太擅长消除递归。 有谁知道如何重写这种方法来消除递归? 谢谢你的帮助。 编辑:非常感谢所有详细的回复。 我已尝试对原始解决方案与Eric的解决方案进行基准测试,而不是使用枚举器方法,而是递归遍历一个lambda,奇怪的是,lambda递归明显快于其他两种方法。 class Node { public […]

在数据库中存储Dictionary 或KeyValuePair

我想看看其他人在处理List 或Dictionary 等类型时遇到了什么,并反过来存储和检索这些数据? 这是一个示例场景:用户将创建自己的“模板”,其中这些模板本质上是Dictionary的集合,例如对于user1,值为(1,Account),(2,Bank),(3,Code),( 4,Savings),对于user2,值(不相关)可以是(1,Name),(2,Grade),(3,Class)等。 这些模板/列表的长度可能不同,但它们始终具有索引和值。 此外,每个列表/模板将只有一个用户链接到它。 您在数据库方面选择了哪些类型? 我应该注意的痛点和/或建议?

在LINQ Select中分配值?

我有以下查询: drivers.Select(d => { d.id = 0; d.updated = DateTime.Now; return d; }).ToList(); drivers是一个List,它带有不同的id和更新的值,因此我在更改Select中的值,但这是正确的方法。 我已经知道我没有给司机重新分配司机,因为Resharper抱怨它,所以我想如果是这样会更好: drivers = drivers.Select(d => { d.id = 0; d.updated = DateTime.Now; return d; }).ToList(); 但这仍然是某人应该为驱动程序列表中的每个元素分配新值的方式吗?

使用Linq在IEnumerable 中查找序列

使用LINQ在IEnumerable查找序列的最有效方法是什么 我希望能够创建一个允许以下调用的扩展方法: int startIndex = largeSequence.FindSequence(subSequence) 匹配必须是相邻的并且是有序的。

如何用自己压缩一个IEnumerable

我正在实现一些基于点列表的数学算法,如距离,面积,质心等。就像在这篇文章中一样: 找到使用linq导航点列表所需的距离 该文章描述了如何通过基本上用“自身”压缩序列来计算一系列点的总距离(按顺序排列),通过将原始IEnumerable的起始位置偏移1来生成Zip的序列。 因此,给定.Net 4.0中的Zip扩展,假设点类型为Point,以及合理的距离公式,您可以进行这样的调用,以生成从一个点到下一个点的距离序列,然后对距离求和: var distances = points.Zip(points.Skip(1),Distance); double totalDistance = distances.Sum(); 面积和质心计算类似,因为它们需要迭代序列,处理每对点(点[i]和点[i + 1])。 我想要制作一个通用的IEnumerable扩展,适合实现这些(可能还有其他)算法,这些算法在序列上运行,一次取两个项目(points [0]和points [1],points [1]和points [2], …,点[n-1]和points [n](或者是n-2和n-1 ……)并应用函数。 我的通用迭代器将具有与Zip类似的签名,但它不会收到第二个要压缩的序列,因为它实际上只是自己压缩。 我的第一次尝试看起来像这样: public static IEnumerable ZipMyself(this IEnumerable seq, Func resultSelector) { return seq.Zip(seq.Skip(1),resultSelector); } 开始编辑:看到响应后,我已经实现了Pairwise,并明确使用了底层的Enumerator,如下所示: public static IEnumerable Pairwise(this IEnumerable seq, Func resultSelector) { TSequence prev = default(TSequence); using (IEnumerator e […]

使用LINQ to SQL访问系统数据库/表?

现在我有一个每天早上运行的SSIS包,并向我报告前一天失败或成功的包数。 这些包的信息部分包含在SQL Server 2005中 msdb数据库(系统数据库)中的sysjobs表(系统表)中。 当试图将包移动到C#可执行文件(主要是为了获得更好的格式化发送的电子邮件)时,我无法找到一种方法来创建允许我通过LINQ访问这些表的dbml文件。 我试图寻找可以使这些表可见的任何属性,但我没有太多运气。 LINQ to SQL可以实现这一点吗?