[英]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.