2015-06-16 5 views
0

Я использую эту строку, чтобы вернуть значение, но вместо того, чтобы его получение ИстиннымПолучить одно значение текста с помощью LINQ

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

Этот вид данных проходит от контроллера

вар 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); 
     } 

ответ

3

Измените Select на Where. Where использует предикат для фильтрации данных и возвращает ту же структуру ... просто подмножество. Select, с другой стороны, изменяет структуру данных, которая будет оцениваться в предоставленной функции. В вашем случае вы меняете структуру как единый Boolean результат, эквивалентный Key равен Nombre. Фиксированный код ниже:

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

И, как было отмечено в комментариях, First * принимает Предикат себя, так что вы можете просто позвонить First в качестве комбинированного Where и First

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

First будет если нет ничего, поэтому вы можете использовать FirstOrDefault, если это подходит лучше

+1

Правильно, но первый имеет такое же состояние Где – Steve

+0

@Steve Согласовано с изменениями, внесенными! –

2

Нужно быть .Where(), not .Select(). .Select() возвращает результат выражения, которое является логическим. .Where() возвращает результат, в котором выражение истинно.

4

В этом случае FirstOrDefault - это то, что вы хотите:

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

использование .FirstOrDefault() и Wouldnt больно, чтобы быть немного более явным в объявлении.

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

Смежные вопросы