我有一个用户表:
Id Name PermissionId ActiveId
1 John 1 1
2 Henry 2 2
许可表
Id Name
1 User
2 SAdmin
Active Table
Id Name
1 Enable
2 Disable
然后我的实体为:
public class Users
{
public int Id { get; set; }
public string Name { get; set; }
public int PermissionId { get; set; }
public int ActiveId { get; set; }
}
public class Permission
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Active
{
public int Id { get; set; }
public string Name { get; set; }
}
在我的存储库中,我想加入这些表并获取所有用户数据,因此我使用linq作为:
public IEnumerable<Users> GetUserData()
{
var results = from user in _db.users
join permission in _db.permission on user.PermissionId equals
permission.Id
join active in _db.active on user.ActiveId equals active.Id;
return results.ToList();
}
如何从表格中选择某些列,我还尝试使用以下内容:
var results = from user in _db.users
join permission in _db.permission on user.PermissionId equals
permission.Id
join active in _db.active on user.ActiveId equals active.Id
select new {Id = user.id, Name = user.name, Permission =
permission.Name, Active = active.Name};
Cannot implicitly convert type 'System.Collections.Generic.List<<anonymous
type: int id, string name, string permission, string active>>' to
'System.Collections.Generic.IEnumerable<Users>'
谢谢,
答案 0 :(得分:0)
您很可能会返回匿名类型,但您的方法需要IEnumerable of Users
public IEnumerable<Users> GetUserData()
如果您需要以其他形状返回数据,您只需要为该返回类型创建一个专用类。
如果新形状与User具有几乎相同的字段,并且它应该对您的项目有意义,请使新类继承自User并使用新字段扩展它
答案 1 :(得分:0)
方法GetUserData期望IEnumerable of Users类型,并且join表达式返回IEnumerable匿名类型,并且编译器无法识别它是相同类型的用户(即使它具有相同的属性):&& #39;问题所在。在连接之后,您必须使用Users类型转换结果,以便创建正确的和期望的返回类型。您可以在下面找到一个示例:
var results = from user in _db.users
join permission in _db.permission
on user.PermissionId equals permission.Id
join active in _db.active on user.ActiveId equals active.Id
select new Users{Id = user.id, Name = user.name,
Permission = permission.Name, Active = active.Name};`
希望它会对你有所帮助。