【问题标题】:Match Table Header To String inside LINQ将表头与 LINQ 中的字符串匹配
【发布时间】:2016-02-04 13:42:06
【问题描述】:

您好,我有一个用户数据库,可以接收特定服务器的电子邮件。

表格示例:

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);

                }

            }

我有一个名为服务器的表,其中包含所有服务器。 所以我调用它并创建一个 SelectListItem 列表。

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

完成后,我必须删除空格,因为有些服务器是这样的:“服务器 2”

由于我的用户表有它作为“Sever2”,我需要删除空格以匹配它。

现在我需要找到一种方法让该变量 serverFixed 变成类似的样子:

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

我觉得如果我可以更改 .Where 以某种方式匹配 serverFixed 我可以做到。

任何想法我可以做什么?谢谢!

【问题讨论】:

    标签: c# linq asp.net-mvc-4


    【解决方案1】:

    您的表格已经被硬编码。我不确定将多个字段用于服务器而不是一个外键字段用于包含所有服务器的目录表是否是一个好的决定。但也许你有一些原因。我相信不可能对 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;
    ...
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2014-01-09
      • 1970-01-01
      相关资源
      最近更新 更多