簡體   English   中英

使用虛擬列表的1:n關系的順序<T>

[英]Order of 1:n relation using virtual List<T>

我使用實體框架和MVC。 我需要按地址ID排列的地址列表順序。 但是當我封裝屬性時,我將其排序,以便實體框架不會填充地址列表。 我能做什么?

public class Student
{
    public int StudentId { get; set; }
    public string Name{ get; set; }
    public string Surname{ get; set; }

    //i need this address list order by address id???
    public virtual List<StudentAddress> Address { get; set; }
}

public class StudentAddress
{
    [Key]
    public int AddressId{ get; set; }

    public string Address { get; set; }
    public string City { get; set; }

}

根據關系建模的標准,關系被認為是無序的,因此您將不能,也不應依賴於順序,但是在顯示數據之前應應用順序。 因此,您可以選擇帶有有序地址的匿名類型,例如:

students.Select(x => new { Student = x, Addresses = x.Address.OrderBy(y => y.AddressId)) })

而且,如果您擔心代碼重復,則可以將其包裝到單獨的方法中並重復使用。

我不知道通過EF / SQL執行此操作的方法,但是您可以執行以下操作:

protected IEnumerable<StudentAddress> addresses;
public virtual IEnumerable<StudentAddress> Address
{
    get { return addresses; }
    set
    {
        addresses = value == null ? null : value.OrderBy(a => a.AddressId);
    }
}

我假設當您說“但是當我封裝屬性以進行排序時,實體框架不會填充地址列表”時,實體框架不會填充地址列表,並且您在此處使用了延遲加載。

您需要導入System.Data.Entity才能使用支持lambda的.Include()。 包含后,您可以僅對要排序的屬性應用OrderBy(),如下所示:

DbContext.Students.Include(s => s.Address.OrderBy(a => a.AddressId))

您最好將列表替換為IList,IQueryable或IEnumerable。 如果您希望支持在該地址上進行插入操作,則最好使用IList。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM