c# - Lambda 在加入时不相等

标签 c# .net lambda .net-4.5

名为类别的表 1 包含 70 条记录 名为 FilterCategorys 的表 2 包含 0 条记录(当前)。

我的 lambda 连接,我只想提取不匹配的记录,所以在这种情况下,我希望得到 70 条记录。这是我不正确的 Lambda:

var filteredList = categorys
            .Join(filterCategorys,
                x => x.Id,
                y => y.CategoryId,
                (x, y) => new { catgeory = x, filter = y })
            .Where(xy => xy.catgeory.Id != xy.filter.CategoryId)
            .Select(xy => new Category()
                        {
                            Name = xy.catgeory.Name,
                            Id = xy.catgeory.Id,
                            ParentCategoryId = xy.catgeory.ParentCategoryId
                        })
            .ToList();

我需要的正确语法是什么?

最佳答案

不确定您是否需要使用 lambda(而不是查询语法),但我更喜欢具有外连接的语句的查询语法。

这应该是等价的:

var filteredList = (
    from c in Categorys 
    join fc in FilterCategorys on c.Id equals fc.CategoryId into outer
    from o in outer.DefaultIfEmpty()
    select new 
    {
        Category = new Category 
        {
            Name = c.Name, 
            Id = c.Id, 
            ParentCategoryId = c.ParentCategoryId
        },
        Exists = (o != null)
    })
    .Where(c => !c.Exists)
    .Select(c => c.Category);

关于c# - Lambda 在加入时不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621416/

相关文章:

c# - 如何使 Redis 缓存在部署在 IIS Express 上但在本地主机上工作的 asp.net 核心 Web 上工作

c# - 如何在 C# 中手动解析带有可选字段的自定义日期时间格式

c# - Autofac Singleton Decorator 构造多次

c# - 如何以编程方式实例化或模拟窗口?

c# - ToLookup() 如何使用多个索引?

javascript - 如何在运行时动态创建 C# 类(根据现有类)

c# - 在窗体之间切换

.net - 在 dotnet 应用程序中使用 Visual Basic 6.0 中声明的事件

java - Lambda 表达式 - 无法将 lambda 参数设置为方法的参数

c++ - 为什么 C++ 中的 lambda 永远不会 DefaultConstructible