2012-07-18 76 views
2

我有两个具有一对多关系的实体,我试图选择子项中的主实体过滤属性。加入LINQ到实体并返回关系的右侧

例如:

public class Pedido 
{ 
    public int Id { get; set; } 
    public string Descricao { get; set; } 
    public virtual ICollection<PedidoItem> Itens { get; set; } 
} 


public class PedidoItem 
{ 
    public int Id { get; set; } 
    public int PedidoId { get; set; } 
    public Pedido Pedido { get; set; } 
    public string Descricao { get; set; } 
    public int Status { get; set; } 
} 


public class DataInit : DropCreateDatabaseAlways<Data> 
{ 
    protected override void Seed(Data context) 
    { 
     context.Pedidos.Add(new Pedido { 
      Descricao = "PEDIDO UM", 
      Itens = new List<PedidoItem> { 
       new PedidoItem { 
        Descricao = "ITEM UM", 
        Status = 0 }, 
       new PedidoItem{ 
        Descricao = "ITEM DOIS", 
        Status = 0 }, 
       new PedidoItem{ 
        Descricao = "ITEM TRES", 
        Status = 0 }, 
       new PedidoItem{ 
        Descricao = "ITEM QUATRO", 
        Status = 1 } 
      } 
     }); 

     context.SaveChanges(); 

     base.Seed(context); 
    } 

    public DataInit() 
    { 

    } 
} 
public class Data : DbContext 
{ 
    public DbSet<Pedido> Pedidos { get; set; } 
    public Data() 
    { 
     Database.SetInitializer(new DataInit()); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Data dt = new Data(); 
     var pedidos = from ped in dt.Pedidos 
         where ped.Itens.Any(item => item.Status == 1) 
         select ped; 

     var lista = pedidos.ToList(); 
    } 
} 

我在数据库中只有一个Pedido实体与状态= 1一个一个项目,我倒是想回仅此项目具有收藏状态= 1,如何我应该怎么做?

我倒是想与只有一个过滤项(item.Status == 1)

回答

1

这是一个有点难以得到你想要什么回报Pedido实体,但我认为它是这样的: Pedidos只有一个Iten(商品?),其中一个商品有Status == 1

这将是:

from ped in dt.Pedidos 
where ped.Itens.Count() == 1 
from it in ped.Itens.Where(i => i.Status == 1) 
select ped // or new { ped.Property1, ..., it.Description } 

用流利的语法这可以转化为SelectMany,但这是那些情况下,综合(或查询)的语法是很容易跟着一个。 (虽然是流利的语法)。