Tag: linq

将两个列表映射到C#中的字典

给定两个 相同大小的 IEnumerable s ,如何将其转换为 使用Linq 的 Dictionary ? IEnumerable<string> keys = new List<string>() { "A", "B", "C" }; IEnumerable<string> values = new List<string>() { "Val A", "Val B", "Val C" }; var dictionary = /* Linq ? */; 预期的产出是: A: Val A B: Val B C: Val C 我想知道是否有一些简单的方法来实现它。 我应该担心performance吗? 如果我有大量collections呢? 我不这样做,如果有更简单的方法来做到这一点,目前我正在这样做: 我有一个扩展方法,将循环IEnumerable提供我的元素和索引号。 public […]

C# – 使用属性名称作为string的属性代码

当我将属性名称作为string时,在C#中对属性进行编码的最简单方法是什么? 例如,我想允许用户通过他们select的属性(使用LINQ)来订购一些search结果。 他们将在UI中select“order by”属性 – 当然是一个string值。 有没有办法直接使用该string作为linq查询的属性,而不必使用条件逻辑(if / else,switch)将string映射到属性。 reflection? 从逻辑上讲,这是我想要做的事情: query = query.OrderBy(x => x."ProductId"); 更新:我最初没有指定我正在使用Linq实体 – 看来reflection(至less是GetProperty,GetValue方法)不会转换为L2E。

确定集合是否为IEnumerable <T>types

如何确定对象的types是IEnumerable <T>? 码: namespace NS { class Program { static IEnumerable<int> GetInts() { yield return 1; } static void Main() { var i = GetInts(); var type = i.GetType(); Console.WriteLine(type.ToString()); } } } 输出: NS.1.Program+<GetInts>d__0 如果我改变GetInts返回IList,一切都OK了输出是: System.Collections.Generic.List`1[System.Int32] 这返回false: namespace NS { class Program { static IEnumerable<int> GetInts() { yield return 1; } static void Main() […]

应该避免LINQ,因为它很慢?

我已经被告知,因为.net linq是如此之慢,我们不应该使用它,并想知道其他人已经得出了相同的结论,例如: 花了1443ms做了10亿比较非LINQ。 拿了4944ms做了10亿比较LINQ。 (减慢243%) 非LINQ代码: for (int i = 0; i < 10000; i++) { foreach (MyLinqTestClass1 item in lst1) //100000 items in the list { if (item.Name == "9999") { isInGroup = true; break; } } } 花了1443ms做了10亿比较非LINQ。 LINQ代码: for (int i = 0; i < 10000; i++) isInGroup = lst1.Cast<MyLinqTestClass1>().Any(item => item.Name […]

在一个LINQ查询中获取两列的总和

假设我有一个名为Items的表(ID int,Done int,Total int) 我可以做两个查询: int total = m.Items.Sum(p=>p.Total) int done = m.Items.Sum(p=>p.Done) 但是我想在一个查询中这样做: var x = from p in m.Items select new { Sum(p.Total), Sum(p.Done)}; 当然有一种方法可以从LINQ语法中调用聚合函数…?

LINQ扩展方法 – Any()与Where()与Exists()

不幸的是,这些方法的名称使可怕的search条件,我一直无法find一个很好的资源,解释这些方法之间的差异 – 就像在什么时候使用每个。 谢谢。 编辑: 我试图完全理解的那种查询是这样的: context.Authors.Where(a => a.Books.Any(b => b.BookID == bookID)).ToList(); 并感谢所有已经回答的人。

在List <T>中交换两个项目

有一个LINQ的方式来交换list<T>的两个项目的位置list<T> ?

使用LINQ在c#中获取List <>元素的位置

我有一个与数字的列表,我想find使用LINQ的最低(不值)的位置 例如:{3,1,0,5}输出= 2

如何使用LINQ从列表中select提供的索引范围内的值

我是一个LINQ新手试图使用它来实现以下目标: 我有一个int列表: List<int> intList = new List<int>(new int[]{1,2,3,3,2,1}); 现在,我想用LINQ来比较前三个元素[索引范围0-2]与最后三个[索引范围3-5]之和。 我尝试了LINQ Select和Take扩展方法以及SelectMany方法,但我无法弄清楚如何说 (from p in intList where p in Take contiguous elements of intList from index x to x+n select p).sum() 我也查看了Contains扩展方法,但是看不到我想要的。 有什么build议么? 谢谢。

按字母顺序排列列表

我有以下class级: class Detail { public Detail() { _details = new List<string>(); } public IList<string> Details { get { return _details; } } private readonly List<string> _details; } 目前我使用以下方法随机排列类: void ShuffleGenericList<T>(IList<T> list) { //generate a Random instance var rnd = new Random(); //get the count of items in the list var i = list.Count(); //do we […]