将表头与 LINQ 中的字符串匹配

本文关键字:字符 字符串 串匹配 表头 LINQ | 更新日期: 2023-09-27 18:33:10

嗨,我有一个能够接收特定服务器电子邮件的用户数据库。

表例:

UserName     Server1     Server2      Server3
Jane.Doe      True        False        True

让我解释一下到底发生了什么,所以我为服务器设置了一个 true 或 false,如果他们是否可以接收特定服务器的电子邮件。

现在,用户提交日志,然后选择要向其报告的服务器。该服务器的管理员将收到一封电子邮件。

但是我不想硬编码(我的老板生我的气(:

例:

if (logSubmission.curServer == "Server1")
{
    email = db.Users.Where(m => m.Server1 == true).Select(m => m.UserName).ToList();                    
} 

所以我认为我能做的是:

IEnumerable<SelectListItem> server = db.servers.Select(m => new SelectListItem
            {
                Value = m.server1,
                Text = m.server1

            });    
            string serverFixed = "";
            foreach (var item in server)
            {
                if (item.Text == logSubmission.curServer)
                {
                    serverFixed = item.Text;
                    serverFixed = serverFixed.Replace(" ", string.Empty);
                }
            }

我有一张名为 servers 的表,它容纳了所有服务器。所以我调用它并创建一个 SelectListItem 列表。

我获取服务器的文本并将其与我们正在查看的当前服务器相匹配。

完成后,我必须删除空格,因为某些服务器如下所示:"服务器 2">

由于我的用户表将其作为"Sever2",我需要删除空格以匹配它。

现在我需要找到一种方法来使该变量服务器固定成类似于:

email = db.Users.Where(m => m.Server1 == true).Select(m => m.UserName).ToList();

我觉得如果我能改变.在哪里以某种方式匹配服务器固定我可以做到。

知道我能做什么吗?谢谢!

将表头与 LINQ 中的字符串匹配

您的表已经硬编码。我不确定为服务器使用多个字段而不是一个外键字段到包含所有服务器的目录表是否是一个好决定。但也许你有一些原因。我相信不可能在 LINQ 中对字段使用某种变量。所以我建议创建一个包含所有服务器的枚举,例如

public enum ServerEnum {server1, server2, ...}

并且您可以使用它来识别您的服务器:

switch(logSubmission.curServer)
{       
   case (ServerEnum.Server.ToString()):
     email = db.Users.Where(m => m.Server1 == true).Select(m => m.UserName).ToList();                    
     break;
...
}

但无论如何,如果您可以更改表的结构,那将是一个更好的决定。