簡體   English   中英

如何使用 EF 核心中的相關實體屬性進行排序

[英]How to order by with related entity properties in EF core

您好,我想使用相關實體屬性對最終結果進行排序,在本例中為 Locality。 我從客戶端獲取關鍵字作為包含列名和排序方向的字符串,例如。 “locality=asc”,但是當我對任何父實體屬性進行排序時,它運行正常,但是具有相關實體的屬性給了我一個錯誤,說客戶 object 沒有任何位置屬性

這是我的 class 客戶和地址

public class Customer : IEntity
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Mobile { get; set; }
    public Guid UserId { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime LastUpdated { get; set; }
    [ForeignKey("Address")]
    public Guid AddressId { get; set; }

    public virtual Address Address { get; set; }
}
   


 public class Address: IEntity
{
    public Guid Id { get; set; }
    public string Lat { get; set; }
    public string Lon { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string Locality { get; set; }
}

在這里,我嘗試使用地址屬性(例如位置)對其進行排序

int skip = (pageNum - 1) * pageSize;

        if (skip < 0)
        {
            skip = 0;
        }

        searchTerm = searchTerm.ToLower();
        var query = _context.Customers.Include(q => q.Address)
                .Where(c => c.FirstName.ToLower().Contains(searchTerm)
                        || c.LastName.ToLower().Contains(searchTerm)
                        || c.Email.ToLower().Contains(searchTerm)
                        || c.Mobile.ToLower().Contains(searchTerm));

        //var sortOrderSplit = sortOrder.Split('=');
        if (sortOrderSplit[0].ToLower() != "locality")
        {
            
              query = query.OrderByField("Email", "asc");
        }
         {
            
              query = query.OrderByField("locality", "asc"); //that gives me an error because type is Address not Customer
        }
          
        var customers = query
                       .Skip(skip)
                       .Take(pageSize)
                       .ToList();

你想通過 Locality ASC 訂購,對嗎?
我認為 Class 類型的查詢是 IEnumerable,所以你可以使用 lumbda 表達式。
因為Locality在地址Class,應該按照流程Customer => Address => Locality,不能只搜索屬性Locality。

if (sortOrderSplit[0].ToLower() != "locality")
{
    query = query.OrderBy(o => o.Email);
}
else
{
    query = query.OrderBy(o => o.Address.Locality);
}

如果您的兩個實體類具有一對一的關系,則必須添加

public Customer Customer { get; set; }

也進入您的地址 class 。 這樣做並再試一次。

暫無
暫無

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

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