标签: linq-to-objects

使用LINQ过滤列表

我有一个从外部应用程序返回的人员列表,我在我的本地应用程序中创建了一个排除列表,让我可以选择从列表中手动删除人员.

我有一个我创建的复合键,这两个键都很常见,我希望找到一种有效的方法,可以使用我的列表从列表中删除人员

例如

class Person
{
    prop string compositeKey { get; set; }
}

class Exclusions
{
    prop string compositeKey { get; set; }
}

List<Person> people = GetFromDB;

List<Exclusions> exclusions = GetFromOtherDB;

List<Person> filteredResults = People - exclustions using the composite key as a comparer
Run Code Online (Sandbox Code Playgroud)

我认为LINQ是这样做的理想方式,但是在尝试连接,扩展方法,使用产量等之后我还是遇到了麻烦.

如果这是SQL我会使用not in (?,?,?)查询.

c# linq linq-to-objects list

20
推荐指数
4
解决办法
9万
查看次数

使用Linq从另一个对象列表中创建一个对象类型的列表

如果我有A类和B类:

public class A
{
    public int TotalCount;
    public string Title;
}

public class B
{
    public int Count;
    public string Title;
}
Run Code Online (Sandbox Code Playgroud)

我有一个实例列表A实例,使用Linq创建和填充类型B列表的最有效方法是什么?

linq linq-to-objects

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

C#合并2个词典

我正在开发一个面向.NET 3.5的C#应用​​程序.在其中,我有2个类似的词典,其中包含我的应用程序中特定元素集的验证标准.两个词典都有相同的签名.第一个字典具有默认设置,第二个字典包含一些用户定义的设置.

var default_settings = new Dictionary<string, MyElementSettings>();
var custom_settings = new Dictionary<string, MyElementSettings>();
Run Code Online (Sandbox Code Playgroud)

我想将2个词典合并为一个包含两个词典元素的词典.

我遇到的问题是两个字典都可能具有一些相同的键值.我想要的基本规则是将两个字典组合在一起,如果default_settings中已经存在custom_settings中的任何键,则custom_settings值将覆盖default_settings值.我拥有的最佳解决方案只是一个foreach循环,检查密钥是否存在于另一个字典中,如果不存在,则添加它.

foreach (var item in custom_settings)
{
    if (default_settings.ContainsKey(item.Key))
        default_settings[item.Key] = item.Value;
    else
        default_settings.Add(item.Key, item.Value);
}
Run Code Online (Sandbox Code Playgroud)

我已经完成了一些基本的LINQ查询,但我仍在努力学习更高级的东西.我已经看到了一些将合并2个字典的查询,但大多数都涉及将任何元素与重复键分组,或者仅返回仅包含重复键的集合/是否存在将模仿foreach循环行为的LINQ查询或表达式我在用?

c# linq-to-objects dictionary

20
推荐指数
2
解决办法
3万
查看次数

至少有一个对象必须实现IComparable

var listair = empcon.OrderBy(x => x.CustomerConnection.OrderBy(y => y.Id)).ToList();
Run Code Online (Sandbox Code Playgroud)

当我使用此语句时,我得到异常"至少有一个对象必须实现IComparable"

我怎么解决这个问题?

c# linq-to-objects

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

如何使用LINQ在字符串[]中找到最长的字符串

我有一个可变长度的字符串数组.目前我有一个循环遍历数组以找到数组中最长的字符串.有没有什么方法可以使用LINQ以更高效和/或更清晰的方式编写它?

c# linq-to-objects

19
推荐指数
3
解决办法
3万
查看次数

如何在SelectMany中使用async lambda?

我在尝试使用asynclambda 时遇到以下错误IEnumerable.SelectMany:

var result = myEnumerable.SelectMany(async (c) => await Functions.GetDataAsync(c.Id));
Run Code Online (Sandbox Code Playgroud)

无法从用法推断出方法'IEnumerable System.Linq.Enumerable.SelectMany(此IEnumerable,Func>)'的类型参数.尝试显式指定类型参数

在哪里GetDataAsync定义为:

public interface IFunctions {
    Task<IEnumerable<DataItem>> GetDataAsync(string itemId);
}

public class Functions : IFunctions {
    public async Task<IEnumerable<DataItem>> GetDataAsync(string itemId) {
        // return await httpCall();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想因为我的GetDataAsync方法实际上返回了一个Task<IEnumerable<T>>.但为什么Select工作,肯定它应该抛出相同的错误?

var result = myEnumerable.Select(async (c) => await Functions.GetDataAsync(c.Id));
Run Code Online (Sandbox Code Playgroud)

有没有办法解决?

c# linq lambda linq-to-objects

19
推荐指数
4
解决办法
7327
查看次数

优化字符串连接的聚合

更新 - 对于一个有思想的心态,你可以假设Aggregate仍会产生正常的结果,无论函数传递给它,包括在优化的情况下.

我编写了这个程序来构建一个从逗号分隔的0到19999之间的长整数字符串.

using System;
using System.Linq;
using System.Diagnostics;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            const int size = 20000;

            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            Enumerable.Range(0, size).Select(n => n.ToString()).Aggregate((a, b) => a + ", " + b);
            stopwatch.Stop();

            Console.WriteLine(stopwatch.ElapsedMilliseconds + "ms");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它说:

5116ms
Run Code Online (Sandbox Code Playgroud)

超过五秒钟,太可怕了.当然这是因为每次循环都会复制整个字符串.

但是,如果评论中指出了一个非常小的变化呢?

using System;
using System.Linq;
using System.Diagnostics;

namespace ConsoleApplication5
{
    using MakeAggregateGoFaster;  // <---- inserted this

    class Program
    {
        static void Main(string[] args)
        {
            const int …
Run Code Online (Sandbox Code Playgroud)

c# optimization linq-to-objects

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

连接三个表并使用左外连接

我有三张桌子.其中两个平等加入,但一个人需要加入左边.我在linq中找到了很多代码,但只在两个表之间.

这是我试图在LINQ中重新编码的SQL代码.

   SELECT PRSN.NAME
       ,CO.NAME
       ,PROD.NAME
   FROM PERSON PRSN
     INNER JOIN COMPANY CO ON PRSN.PERSON_ID = CO.PERSON_ID
     LEFT OUTER JOIN PRODUCT PROD ON PROD.PERSON_ID = PROD.PERSON_ID;
Run Code Online (Sandbox Code Playgroud)

这是我用作基础的LINQ代码片段.我只是无法通过LINQ和左外连接拼凑第三个表(我的示例SQL中的产品).样本位于两个表之间.谢谢你的任何提示.

   var leftOuterJoinQuery =
    from category in categories
    join prod in products on category.ID equals prod.CategoryID into prodGroup
    from item in prodGroup.DefaultIfEmpty(new Product{Name = String.Empty, CategoryID = 0})
        select new { CatName = category.Name, ProdName = item.Name };
Run Code Online (Sandbox Code Playgroud)

迈克尔

linq linq-to-objects linq-to-entities

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

如何使用linq查询LIST

假设我将人类实例添加到列表然后我需要使用linq查询列表.

List lst=new List();
lst.add(new person{ID=1,Name="jhon",salaty=2500});
lst.add(new person{ID=2,Name="Sena",salaty=1500});
lst.add(new person{ID=3,Name="Max",salaty=5500});
lst.add(new person{ID=4,Name="Gen",salaty=3500});
Run Code Online (Sandbox Code Playgroud)

现在我想用linq查询上面的列表.请指导我的示例代码.

c# linq-to-objects

18
推荐指数
4
解决办法
10万
查看次数

.GroupBy()是否保证其分组中的顺序?

假设我有一个(有序的)动物序列:

Eagle
Elephant
Tarantula
Terrapin
Tiger

我按第一封信分组:

Animals.GroupBy(animal => animal.First())
Run Code Online (Sandbox Code Playgroud)

IGrouping结果序列中s 的元素是否与输入序列的顺序相同?

c# linq linq-to-objects group-by ilookup

18
推荐指数
2
解决办法
3160
查看次数