0

私は次のPOCOを持っています:

public Ticket
{
    public int Id { get; set; }
    public int IdOwner { get; set; }
    public int IdDependency { get; set; }
    public string SerialNumber { get; set; }

    public Owner Owner { get; set; } 
    public Dependency Dependency { get; set; }
}

public Owner 
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Other attributes
}

public Dependency 
{
    public int Id { get; set; }
    public string Name { get; set; }
    // Other attributes
}

Listだけのチケットを返却したいのですが。問題は、フィルターに、を渡した場合にとを記述し、同じことを。に渡すことです。私のフィルターを見てください:Owner NameDependency NamewhereOwnerOwnerIdDependency

public List<Ticket> SelectTickets(string SerialNumber, int IdOwner, int IdDependency)
{
    IQueryble<Ticket> query = context.Tickets.Where(t => t.SerialNumber == SerialNumber);

    if (IdOwner != 0)
    {
        query = query.Where( ?? );
    }

    if (IdDependency!= 0)
    {
        query = query.Where( ?? );
    }

    return query.ToList();
}
4

3 に答える 3

0

結果のクエリは、フィルタリングした後、好きな形式に投影できます。

returnステートメントをこのように置き換えるとうまくいきますか、それとも私が完全には理解していなかったより複雑な要件がありますか?

return query.Select(t => new Ticket() {
    Owner = t.Owner,
    Dependency = t.Dependency;
}.ToList();
于 2012-04-20T14:11:15.357 に答える
0

私があなたの意味を理解していれば、それは理にかなっています。

        public Ticket
        {
            public int Id { get; set; }
            public int OwnerId{ get; set; }
            public int DependencyId { get; set; }
            public string SerialNumber { get; set; }

            public Owner Owner { get; set; } 
            public Dependency Dependency { get; set; }
        }

        public Owner 
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public List<Ticket> Tickets {get;set;}
        }

        public Dependency 
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public List<Ticket> Tickets {get;set;}
        }
        public List<Ticket> SelectTickets(string serialNumber, int ownerId, int dependencyId)
        {
            return context.Tickets.Where(t => t.SerialNumber == serialNumber && t.OwnerId == ownerId && t.DependencyId == dependencyId).ToList();
        }
于 2012-04-20T14:08:42.007 に答える
0

selectステートメントを使用します。

query = query.Select(t => new Ticket { 
    Owner = new Owner {Name = t.Owner.Name}, 
    Dependency = new Dependency  {Name = t.Dependency.Name}
}); 
return query.ToList();

ただし、この場合、Ticketを返すのではなく、TicketSummaryなどの他のオブジェクトを返したいようです。

public class TicketSummary {
    public OwnerName {get;set;}
    public DependencyName {get;set;}
}

その後、あなたは持っているでしょう

query = query.Select(t => new TicketSummary { 
    OwnerName = t.Owner.Name, 
    DependencyName = t.Dependency.Name
}); 
return query.ToList();
于 2012-04-20T14:09:01.310 に答える