Tag: linq

使用LINQ进行字母数字排序

我有一个string[] ,其中每个元素都以一些数字值结尾。 string[] partNumbers = new string[] { “ABC10”, “ABC1″,”ABC2”, “ABC11″,”ABC10”, “AB1”, “AB2”, “Ab11” }; 我试图使用LINQ按如下方式对上面的数组进行排序,但我没有得到预期的结果。 var result = partNumbers.OrderBy(x => x); 实际结果: AB1 AB11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2 预期结果 AB1 AB2 AB11 ..

使用多个字段过滤/搜索 – ASP.NET MVC

我在EF 6中使用ASP.NET MVC 。 我有一个库存页面,显示库存商品的所有信息。 现在我想过滤记录。 在下图中我有3个选项。 我可以按每个选项进行过滤,一次一个,或者两个或全部三个组合。 我正在考虑为所选的每个选项编写linq查询。 但是如果filter选项增加,这将是不可能的。有更好的方法。 谢谢! 这就是我在我的控制器中所做的。(目前下拉有两个选项,不包括:“ – 选择一个 – ”) public ActionResult StockLevel(string option, string batch, string name) { if (option != “0” && batch == “” && name == “”) { if(option == “BelowMin”) { List stk = (from s in db.Stocks where s.Qty < s.Item.AlertQty select s).ToList(); […]

使用LINQ旋转数据

我试图看看我是否可以使用LINQ来解决我遇到的问题。 我有一个包含Enum(TypeCode)和User对象的项目集合,我需要将其展平以显示在网格中。 这很难解释,所以让我举一个简单的例子。 集合有这样的项目: TypeCode | User ————— 1 | Don Smith 1 | Mike Jones 1 | James Ray 2 | Tom Rizzo 2 | Alex Homes 3 | Andy Bates 我需要输出为: 1 | 2 | 3 Don Smith | Tom Rizzo | Andy Bates Mike Jones | Alex Homes | James Ray | […]

使用Enumerable.Range消耗大量内存?

最初我想知道ToList是否比使用List的构造函数分配更多的内存,它采用IEnumerable (没有区别)。 出于测试目的,我使用Enumerable.Range创建了一个源数组,我可以用它来创建List的实例,通过1. ToList和2. 构造函数 。 两者都在创建副本。 这就是我注意到以下内存消耗的巨大差异: Enumerable.Range(1, 10000000)或 Enumerable.Range(1, 10000000).ToArray() 当我使用第一个并调用ToList ,生成的对象比数组(38,26MB / 64MB)节省大约60%的内存。 问:推理错误的原因是什么? var memoryBefore = GC.GetTotalMemory(true); var range = Enumerable.Range(1, 10000000); var rangeMem = GC.GetTotalMemory(true) – memoryBefore; // negligible var list = range.ToList(); var memoryList = GC.GetTotalMemory(true) – memoryBefore – rangeMem; String memInfoEnumerable = String.Format(“Memory before: {0:N2} MB List: {1:N2} […]

如何将数组列表转换为多维数组

我需要将以下集合转换为double [,]: var ret = new List(); 列表中的所有数组都具有相同的长度。 最简单的方法ret.ToArray()产生double [] [],这不是我想要的。 当然,我可以手动创建一个新数组,并在循环中复制数字,但是有更优雅的方式吗? 编辑:我的库是从另一种语言Mathematica调用的,该语言尚未在.Net中开发。 我不认为该语言可以利用锯齿状数组。 我必须返回一个多维数组。

Linq to Entities中的动态where子句(OR)

在这里的post中,我学习了如何使用Linq的延迟执行来构建动态查询。 但查询实际上是使用WHERE条件的AND连接。 如何使用OR逻辑实现相同的查询? 由于Flags枚举,查询应搜索Username , WindowsUsername或两者 : public User GetUser(IdentifierType type, string identifier) { using (var context = contextFactory.Invoke()) { var query = from u in context.Users select u; if (type.HasFlag(IdentifierType.Username)) query = query.Where(u => u.Username == identifier); if (type.HasFlag(IdentifierType.Windows)) query = query.Where(u => u.WindowsUsername == identifier); return query.FirstOrDefault(); } }

LINQ扩展方法的顺序不影响性能?

我很惊讶,无论我是在前置还是附加LINQ扩展方法都没关系。 使用Enumerable.FirstOrDefault测试: hugeList.Where(x => x.Text.Contains(“10000”)).FirstOrDefault(); hugeList.FirstOrDefault(x => x.Text.Contains(“10000”)); var hugeList = Enumerable.Range(1, 50000000) .Select(i => new { ID = i, Text = “Item” + i }); var sw1 = new System.Diagnostics.Stopwatch(); var sw2 = new System.Diagnostics.Stopwatch(); sw1.Start(); for(int i=0;i x.Text.Contains(“10000”)).FirstOrDefault(); sw1.Stop(); sw2.Start(); for(int i=0;i x.Text.Contains(“10000”)); sw2.Stop(); var result1 = String.Format(“FirstOrDefault after: {0} FirstOrDefault before: {1}”, […]

如何“压缩”或“旋转”可变数量的列表?

如果我有一个包含任意数量列表的列表,如下所示: var myList = new List<List>() { new List() { “a”, “b”, “c”, “d” }, new List() { “1”, “2”, “3”, “4” }, new List() { “w”, “x”, “y”, “z” }, // …etc… }; …有没有办法以某种方式将列表“拉链”或“旋转”成这样的东西? { { “a”, “1”, “w”, … }, { “b”, “2”, “x”, … }, { “c”, “3”, “y”, … }, { […]

LINQ动态分组

我有一个类列表的记录,因此用户可以选择按属性名称动态分组行。 例如MenuText , RoleName或ActionName 。 然后我必须执行分组,所以我需要一个通用方法来通过传递列名来处理分组。 示例: public class Menu { public string MenuText {get;set;} public string RoleName {get;set;} public string ActionName {get;set;} } public class Menus { var list = new List(); list.Add( new Menu {MenuText=”abc”,RoleName =”Admin”, ActionName=”xyz”}; list.Add( new Menu {MenuText=”abc”,RoleName =”Admin”, ActionName=”xyz”}; list.Add( new Menu {MenuText=”abc1″,RoleName =”Admin1″, ActionName=”xyz1″}; list.Add( new Menu {MenuText=”abc1″,RoleName […]

Linq的组合发电机

是否有可能创建一些Linq,生成一个包含一系列数字的所有可能组合的List? 如果输入“21”,它将生成一个包含以下元素的列表: list[0] = “21” list[1] = “22” list[2] = “11” list[3] = “12” (不按顺序) 我知道你可以使用范围来做以下事情: List letterRange = Enumerable.Range(‘a’, ‘z’ – ‘a’ + 1).Select(i => (Char)i).ToList(); //97 – 122 + 1 = 26 letters/iterations 从az生成字母表。 但我似乎无法转移这些知识来制作组合发生器 我已经能够用以下代码弄清楚它,但它看起来太笨重了,我相信它可以用几行完成。 它确实感觉我做的是一个糟糕的解决方案。 想象一下,如果它有帮助,我已经调用了GetAllCombinations(“4321”) public static String[] GetAllCombinations(String s) { var combinations = new string[PossibleCombinations(s.Length)]; int n = PossibleCombinations(s.Length […]