【问题标题】:Get a single text value using linq使用 linq 获取单个文本值
【发布时间】:2023-03-08 23:22:01
【问题描述】:

我正在使用这一行来返回一个值,但它却得到了一个 True

var valor = valoresCampoAdicionalesEmpresa.Select(p => p.Key == propiedad.Nombre).First();

这是视图数据从控制器传递过来的

var valoresCampoAdicionalesEmpresa = (字典)ViewData["ValoresCampoAdicionalesEmpresa"];

public ActionResult Edit(int? id)
        {
            var listFields = from b in db.Propiedades
                             where b.Entidad.Nombre == "Empresa"
                             select b;
            ViewData["CamposAdicionalesEmpresa"] = listFields.ToList<Propiedad>();

            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Empresa empresa = db.Empresas.Find(id);
            if (empresa.PropiedadesExtra != null)
            {
                XElement xmlTree = XElement.Parse(empresa.PropiedadesExtra);
                Dictionary<string, string> dict = new Dictionary<string, string>();
                foreach (var el in xmlTree.Elements())
                {
                    dict.Add(el.Name.LocalName, el.Value);
                }

                ViewData["ValoresCampoAdicionalesEmpresa"] = dict;
            }

            if (empresa == null)
            {
                return HttpNotFound();
            }
            return View(empresa);
        }

【问题讨论】:

    标签: c# asp.net-mvc linq entity-framework asp.net-mvc-3


    【解决方案1】:

    在这种情况下,FirstOrDefault 就是你想要的:

    var valor = valoresCampoAdicionalesEmpresa.FirstOrDefault(p => p.Key == propiedad.Nombre);
    

    【讨论】:

      【解决方案2】:

      将您的 Select 更改为 WhereWhere 使用谓词过滤数据并返回相同的结构......只是一个子集。另一方面,Select 将数据结构更改为在提供的函数中评估的任何内容。在您的情况下,您将结构更改为单个Boolean 结果,相当于Key 是否等于Nombre。固定代码如下:

      var valor = valoresCampoAdicionalesEmpresa.Where(p => p.Key == propiedad.Nombre).First();
      

      并且,正如 cmets 中所指出的,First* 本身接受一个谓词,因此您可以简单地将 First 称为 WhereFirst 的组合

      var valor = valoresCampoAdicionalesEmpresa.First(p => p.Key == propiedad.Nombre);
      

      First 会在什么都没有的情况下抛出,所以你可以使用FirstOrDefault 如果更合适的话

      【讨论】:

      • 正确但首先采用与 Where 相同的条件
      • @Steve 同意,修改!
      【解决方案3】:

      使用.FirstOrDefault() 并且在声明中更明确一点不会有什么坏处。

      string? valor = valoresCampoAdicionalesEmpresa.FirstOrDefault(p =&gt; p.Key == propiedad.Nombre);

      【讨论】:

        【解决方案4】:

        需要是 .Where(),而不是 .Select()。 .Select() 返回表达式的结果,它是一个布尔值。 .Where() 返回表达式为真的结果。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-19
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多