我有一个包含这组记录的Excel文件,还有一个名为UserTable的数据库,其中包含一组记录.我要做的是将这两条记录与名为UserID的字段进行比较.在UserTable中,有些字段的值为空值,有些字段的值为空.如果我将Excel与数据库(UserTable)记录进行比较,它必须获取在所有字段中都有值的更新记录. 我已经变了

我试过这个:

    public class UpdateData
    {
        public void Update(List<UserTable> users, List<UserTable> mappeddata)
        {
            //var result = from values in mappeddata join values2 in users on values.UserId equals values2.UserId select values;
            var valuestobeupdated = from m1 in mappeddata
                          join m2 in users on m1.UserId equals m2.UserId
                          where m1.ManagerUserId != m2.ManagerUserId
                            || m1.Department != m2.Department
                            || m1.Title != m2.Title ||  m1.Email != m2.Email || m1.FirstName != m2.FirstName    
                          select m1;
            Console.WriteLine("Updated");

        }
    }

但这是区分大小写的,例如,如果USERS中的USERID=A24070和mappddata中的USERID=a24070不匹配,其他字段也是如此. 有没有办法使它不区分大小写 例如,我在另一条语句中这样做了 var userIdnotinTable=userIdinExcel.Except(userIdinTable, StringComparer.OrdinalIgnoreCase);个 有没有这样的例子?或者,有没有其他方法可以做到这一点?

谢谢!

推荐答案

您总是可以将等式的两边都设置为.ToLower(),但根据数据量的不同,这可能会带来明显的性能影响.

编辑:

在考虑性能时,重要的是要了解任务是定期执行还是手动执行一次(或几次):

对于现代系统来说,将两个~8字符的字符串转换为小写的x 200,000仍然不是一个了不起的壮举,但如果要执行这个任务,比如说每10分钟执行一次,那么额外的毫秒数将开始累积,并且在CPU时间上会很明显(进一步降低意味着更多的服务器成本).

如果你需要做这一次--绝对地go 做,我会说.

Csharp相关问答推荐

EF Core的GbContent如何 suppress 所有CS 8618(不可为空属性)警告?

在C# 11之前, struct 中的每个字段都必须显式分配?不能繁殖

如何使用C#和Graph API从Azure Directory获取用户详细信息

如何创建ASP.NET Core主机并在同一进程中运行请求

一小时后,自定义缓存停止在App Insight中保存

始终保留数组中的最后N个值,丢弃最老的

C#EF Core 8.0表现与预期不符

如何使用C#中的主构造函数功能使用多个构造函数?

未在数据流块之间传播完成

有没有类似于扩展元素的合并元组的语法?

使用ExtractIconEx(或其他方式)提取最大的可用图标

依赖项注入、工厂方法和处置困境

如何更改新创建的实例的变量?

源代码生成器:CS8795分部方法';Class1.GetS2(字符串)';必须有实现部分,因为它有可访问性修饰符?

C#LINQ子字符串

如何在.NET MAUI中最大化GraphicsView的大小?

发布.NET 8 Blazor WebAssembly独立应用程序以进行静态站点部署

解决方案:延长ABP框架和ANGING OpenIddict中的令牌生命周期

将两个for循环更改为一条LINQ语句

SqlException:无法打开数据库.升级到Dotnet 8后-数据库兼容性版本-非EFCore兼容性级别