gpt4 book ai didi

c# - 使用不在数据库中的属性的动态 OrderBy() 会引发异常

转载 作者:行者123 更新时间:2023-12-02 15:39:54 25 4
gpt4 key购买 nike

我有以下型号:

public class User
{
public string UserId { get; set; }
public string UserName { get; set; }
public List<Membership> Membership { get; set; }
public bool IsRegistered
{
get { return !String.IsNullOrEmpty(UserName); }
}
}

public class Membership
{
public string MembershipId { get; set; }
public User User { get; set; }
}

在我的存储库中 Membership实体,我尝试通过执行以下操作来订购我的集合,其中 entriesIQueryable<Membership>orderBy是一个等于 { x => x.User.IsRegistered } 的 LambdaExpression :

ordered = Queryable.OrderBy(ordered, orderBy);

当我尝试执行此操作时,出现以下错误:

The specified type member 'IsRegistered' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

如何按数据库中没有的属性对我的集合进行排序?

提前致谢。

最佳答案

由于 IsRegistered 是客户端函数,因此您需要使用 LINQ 对对象进行排序。您可以通过枚举 LINQ over SQL 来将 LINQ over SQL 转换为 LINQ over object。然后,一旦它是基于对象的 LINQ,您就可以使用基于对象的 OrderBy 的 LINQ 对其进行排序。一种常见的方法是调用 ToList,例如:

ordered = Queryable.ToList().OrderBy(ordered, orderBy);

如果你想在数据库上进行排序,那么你需要将客户端代码转换为与 SQL 兼容的代码,例如:

ordered = Queryable.OrderBy(ordered, (x=>x.User.UserName!=null && x.User.UserName!=''));

关于c# - 使用不在数据库中的属性的动态 OrderBy() 会引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32531280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com