2012-04-18 12 views
9

Usando MVC EF, ¿cómo puedo filtrar los resultados por un campo que no sea el id?Cómo usar una cláusula where en MVC ef

return View(db.Drafts.Where(PublicationId=id)); 

PublicationId es una columna en la tabla Borradores.

Cualquier ayuda es apreciada.

Respuesta

15
public ActionResult Index(int id) 
{ 
    var drafts = db.Drafts.Where(d => d.PublicationId == id).ToList(); 
    return View(drafts); 
} 

o si quieres solo proyecto (coz el id es generalmente únicos):

public ActionResult Index(int id) 
{ 
    var draft = db.Drafts.SingleOrDefault(d => d.PublicationId == id); 
    return View(draft); 
} 
+0

+1: No me di cuenta de que 'SingleOrDefault' tenía sobrecargas. –

2

¿Está familiarizado con lambdas? En la lambda de su cláusula where, puede especificar cualquier propiedad que desee.

return View(db.Drafts.Where(d => d.SomeProperty == value)); 

Me gustaría también considerar la posibilidad de los datos si se devuelve a la página en un modelo, en lugar de hacer el modelo sea el modelo real POCO. Un modelo MVC maneja la pantalla, un modelo POCO maneja sus datos.

+0

Gracias. Esa es también una respuesta útil. – alockrem

+1

Entonces, ¿qué hay de subir la votación? :) – mccow002

4

No estoy seguro de lo que su clase Draft parece, pero vamos a suponer que se ve algo como esto:

public class Draft 
{ 
    public int Id { get; set; } 
    public int PublicationId { get; set; } 
    public string Name { get; set; } 
} 

Se puede escribir una consulta como esta:

return View(db.Drafts.Where(d => d.Name == "foo")); 

esto sólo return Drafts que tenía un nombre de "foo". Esto por sí mismo probablemente no sea útil. Usted más que probable que desee controlar esto pasando datos en el controlador (cadena de consulta, el valor de la forma, el valor de ruta, etc.):

public ActionResult Index(int id, string filter) 
{ 
    return View(db.Drafts.Where(d => d.Name == filter)); 
} 

O puede filtrar en varias propiedades:

public ActionResult Index(int id, string filter) 
{ 
    return View(db.Drafts.Where(d => d.Name == filter && d.PublicationId == id)); 
} 
+0

Gracias. Esa es también una respuesta útil. – alockrem

+0

¿De dónde viene la variable d? ¿La letra importa? Saludos –

+0

@ DanyRancher Es una expresión lambda. La carta no importa, pero hay algunas restricciones con respecto al alcance. – Dismissile