2

1対多の関係にある2つのエンティティがあり、子アイテムのプロパティをフィルタリングするマスターエンティティを選択しようとしています。

例えば:

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のアイテムが1つだけあり、コレクションにステータスが1のこのアイテムのみを返したいのですが、どうすればよいですか?

フィルタリングされたアイテムが1つだけのPedidoエンティティを返したい(item.Status == 1)

4

1 に答える 1

1

欲しいものを正確に手に入れるのは少し難しいですが、これだと思います。1つ(アイテム?)Pedidosしかなくその1つのアイテムに。ItenStatus == 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が、これは、包括的な(またはクエリ)構文に従うのがはるかに簡単な場合の1つです。(Wereは流暢な構文ですが)。

于 2012-07-21T17:41:12.083 に答える