使用linq获取单个文本值

时间:2015-06-16 20:27:10

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

我正在使用此行返回一个值,而是获得一个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);
        }

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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

并且,正如评论中指出的那样,First *会接受谓词本身,因此您只需将First称为合并WhereFirst

var valor = valoresCampoAdicionalesEmpresa.First(p => p.Key == propiedad.Nombre);
如果没有任何内容,

First将会抛出,因此如果更合适,您可以使用FirstOrDefault

答案 2 :(得分:2)

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

答案 3 :(得分:1)

使用.FirstOrDefault()并且在声明时不会有任何明显的伤害。

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