【发布时间】:2018-12-17 04:23:43
【问题描述】:
我有一个 ProUser 类,它的 ProUserContacts 是一个未映射的属性,我使用这个属性来表示由特定 proUser 创建的联系人数量:
public class ProUser : BaseEntity
{
public Guid? UserId { get; set; }
...
[NotMapped]
public int ProUserContacts { get; set; }
}
还有一个控制器来查询,然后按 ProUserContacts 对 proUser 列表进行排序:
public IEnumerable<WebDataLayer.Models.ProUser> ListAllPaging(string sortBy)
{
var proUsers = _proUserService.Filter(p => !p.IsDelete);
proUsers = proUsers.OrderBy(x => x.JoinedDay);
foreach (var item in proUsers)
{
item.ProUserContacts = CountProUserContact(item.Id);
}
switch (sortBy?.ToLower())
{
case "prousercontact":
proUsers = proUsers.OrderBy(x => x.ProUserContacts);
break;
default:
proUsers = proUsers.OrderBy(x => x.Id);
break;
}
return proUsers;
}
我想显示按 ProUserContacts 排序的 proUser 列表,但出现错误:LINQ to Entities 不支持指定类型成员“ProUserContacts”。仅支持初始化程序、实体成员和实体导航属性。在这一行:
proUsers = proUsers.OrderBy(x => x.ProUserContacts);
我已经尝试了相同主题推荐的几个解决方案,但当时没有奏效。 需要你的建议!!! 更新:_proUserService 的代码:这只是一组使用实体框架与数据库的连接
internal class ProUserService : EntityService<ProUser>, IProUserService
{
public ProUserService(IUnitOfWork unitOfWork, IGenericRepository<ProUser> repository) : base(unitOfWork, repository)
{
}
public List<ProUser> GetProUsersByCustomerCode(string customerCode)
{
var proUsers = Repository.Filter(x => !x.IsDelete && x.CustomerCode.ToLower().Equals(customerCode.ToLower())).ToList();
return proUsers;
}
}
【问题讨论】:
-
您能否向我们发送更多信息,例如您在哪一行遇到错误 countprousercontact 方法中有什么内容。
-
我刚刚更新了它@Justcode
-
你能分享
_proUserService代码吗! -
嗨,_proUserService 只是一个使用实体连接到数据库的类。它适用于 SQL DB 中包含的所有属性,不适用于未映射的属性@TanvirArjel。无论如何,我刚刚更新了 _proUserService 的代码
-
因为 proUsers 是一个 IQueryable,它不能保存物化值 - 我建议在 switch 块 (List
proUsersMat = null;) 之前声明一个物化列表,在切换块(使用 .ToList(),也在对未映射字段进行排序之前)并返回它而不是 IQueryable。
标签: asp.net-mvc entity-framework