Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过EF core中的相关实体属性进行排序_C#_.net_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 如何通过EF core中的相关实体属性进行排序

C# 如何通过EF core中的相关实体属性进行排序,c#,.net,asp.net-core,entity-framework-core,C#,.net,Asp.net Core,Entity Framework Core,您好,我想使用相关实体属性对最终结果进行排序,在本例中是局部性。我从客户端获取的关键字是一个字符串,其中包括列名和排序方向,例如“locality=asc”,但当我使用任何父实体属性执行orderby时,它运行良好。但是,具有相关实体的属性告诉我一个错误,即customer对象没有任何locality属性 这是我的班级客户和地址 public class Customer : IEntity { public Guid Id { get; set; } public string

您好,我想使用相关实体属性对最终结果进行排序,在本例中是局部性。我从客户端获取的关键字是一个字符串,其中包括列名和排序方向,例如“locality=asc”,但当我使用任何父实体属性执行orderby时,它运行良好。但是,具有相关实体的属性告诉我一个错误,即customer对象没有任何locality属性

这是我的班级客户和地址

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; }
}
在这里,我试图用地址属性(如Location)对其进行排序

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();
int skip=(pageNum-1)*页面大小;
如果(跳过<0)
{
跳过=0;
}
searchTerm=searchTerm.ToLower();
var query=\u context.Customers.Include(q=>q.Address)
.Where(c=>c.FirstName.ToLower().Contains(searchTerm)
||c.LastName.ToLower().Contains(searchTerm)
||c.Email.ToLower()包含(searchTerm)
||c.Mobile.ToLower().Contains(searchTerm));
//var sortOrderSplit=sortOrder.Split('=');
if(sortOrderSplit[0].ToLower()!=“locality”)
{
query=query.OrderByField(“电子邮件”、“asc”);
}
{
query=query.OrderByField(“locality”,“asc”);//这给了我一个错误,因为类型是Address而不是Customer
}
var客户=查询
.Skip(Skip)
.Take(页面大小)
.ToList();

如果两个实体类具有一对一关系,则必须添加

public Customer Customer { get; set; }
把你的地址也写进了课堂。
执行此操作并重试。

您希望按地区ASC订购,对吗?
我认为查询的类类型是IEnumerable,所以可以使用lumbda表达式。
因为Locality在Address类中,所以应该遵循流Customer=>Address=>Locality,而不仅仅是搜索属性Locality

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

什么是排序字段?听起来像是自定义方法。必须对其进行调整以处理以点分隔的属性路径(如),这样您就可以通过类似于标准static
.OrderBy(c=>c.Address.Locality)
调用的“Address.Locality”来调用它。