使用 linq 获取单个文本值

本文关键字:文本 单个 获取 linq 使用 | 更新日期: 2023-09-27 17:56:41

我用这条线返回一个值,但它得到一个 True

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

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

var valoresCampoAdicionalesEmpresa = (Dictionary)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);
        }

使用 linq 获取单个文本值

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

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

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

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

而且,正如评论中指出的,First * 接受谓词本身,因此您可以简单地将 First 称为组合WhereFirst

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

如果什么都没有,First会扔,所以如果更适合,你可以使用FirstOrDefault

需要 。其中(),不是 。选择()。.Select() 返回表达式的结果,这是一个布尔值。.Where() 返回表达式为 true 的结果。

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

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