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