C# 在实体框架中有更好的选择多行的方法吗?
我只是想知道,有没有比按照下面的代码创建列表更好的方法从多行获取数据 这不是一个真正的问题,更多的是一种代码味道,因为一个人可能有50多行,而这种解决方案在这种情况下是不切实际的 任何和所有的帮助都将不胜感激=]C# 在实体框架中有更好的选择多行的方法吗?,c#,linq,generics,collections,C#,Linq,Generics,Collections,我只是想知道,有没有比按照下面的代码创建列表更好的方法从多行获取数据 这不是一个真正的问题,更多的是一种代码味道,因为一个人可能有50多行,而这种解决方案在这种情况下是不切实际的 任何和所有的帮助都将不胜感激=] 类管理 { 列表用户名=新列表(); List Lockoutenabled=新列表(); List AccessFailedCount=新列表(); 列表详细信息=新列表(); vatswebentitiesmanageentity=新的VatsWebEntitiesManage()
类管理
{
列表用户名=新列表();
List Lockoutenabled=新列表();
List AccessFailedCount=新列表();
列表详细信息=新列表();
vatswebentitiesmanageentity=新的VatsWebEntitiesManage();
公共列表FetchUserDetails()
{
var usernames=ManageEntity.AspNetUsers.Select(m=>m.UserName);
var lockouts=ManageEntity.AspNetUsers.Select(l=>l.LockoutEnabled);
var AccessFailedCounts=ManageEntity.AspNetUsers.Select(afc=>afc.AccessFailedCount);
foreach(用户名中的var项)
{
用户名。添加(项);
}
foreach(锁定中的var项目)
{
添加(item.ToString());
}
foreach(AccessFailedCounts中的var项)
{
AccessFailedCount.Add(item.ToString());
}
添加(用户名);
详细信息。添加(可锁定);
详细信息。添加(AccessFailedCount);
报税表(详情);
}
}
为什么不创建一个类UserDetails(甚至只使用AspNetUser类),将Username、lockoutenabled和accessfailedcount作为属性。然后将其加载并返回IEnum
return from u in ManageEntity.AspNetUsers
select new UserDetails{
Username = u.UserName,
Lockouts = u.LockoutEnabled,
AccessFailedCounts = u.AccessFailedCount
};
最好有一个包含所有所需属性的类:
public class UserDetail
{
public String UserName {get; set;}
public String LockoutEnabled {get; set;}
public String AccessFailedCount {get; set;}
}
然后创建用户详细信息列表,如:
var list = (from u in ManageEntity.AspNetUsers
select new UserDetail
{
UserName = u.UserName,
LockoutEnabled = u.LockoutEnabled,
AccessFailedCounts = u.AccessFailedCount
}).ToList();
请原谅任何语法问题,我远离我的代码编辑器:)首先:使用
using (var c = ManageEntity())
{
// Your code
}
我不知道你的列表是什么。如果所有数据都已连接,则可以使用所需的所有属性创建一个类并填充它
public class Data
{
public string UserName {get; set;}
public string Lockoutenabled {get; set;}
public string AccessFailedCount {get; set;}
}
并添加所有数据
public List<Data> FetchUserDetails()
{
using (var c = ManageEntity())
{
return c.AspNetUsers.Select(m => new Data{
UserName= m.UserName,
LockoutEnabled=m.LockoutEnabled,
AccessFailedCount=m.AccessFailedCount
}).ToList()
}
}
public List FetchUserDetails()
{
使用(var c=ManageEntity())
{
返回c.AspNetUsers。选择(m=>newdata{
UserName=m.UserName,
LockoutEnabled=m.LockoutEnabled,
AccessFailedCount=m.AccessFailedCount
})托利斯先生()
}
}
类似这样的内容:)您应该阅读一些有关EF的详细信息。
我认为您希望归档:
从行中获取列表
最佳性能
我只是演示一个列表,如下所示:
var usernames = ManageEntity.AspNetUsers.AsQueryable().Select(m => m.UserName).ToList();
ToList()
获取列表李>
AsQueryable()
不会从中加载所有数据
DB。因此,获得更好的性能
.希望对你有用。我想你已经把我们大多数人搞糊涂了,弄不清楚你在这里想要完成什么。我认为你想要做的事情的典型方法是使用一个函数,比如
public class Manage
{
private VatsWebEntitiesManage ManageEntity = new VatsWebEntitiesManage();
public List<AspNetUser> Users { get; set; }
public List<AspNetUser> FetchUserDetails()
{
var users = ManageEntity.AspNetUsers.ToList();
return Users = users;
}
}
是的,您可以创建一个具有表和属性的类
从联接all表后获取所有必需的值,但外键关系为
必需的
范例
class ABC()
{
public List<T1> t1 {get;set;};
public List<T1> t2 {get;set;};
public List<T1> t3 {get;set;};
}
List<ABC> lstABC = new List<ABC>();
lstABC = (from A in db.T1
join B in db.T2 on A.ID equals B.ID
join C in db.T3 on B.ID equals C.ID
select new ABC
{
t1=A,
t2=B,
t3 =C
}).ToList();
class ABC()
{
公共列表t1{get;set;};
公共列表t2{get;set;};
公共列表t3{get;set;};
}
List lstABC=新列表();
lstABC=(从db.T1中的A开始)
在A.ID等于B.ID的db.T2中加入B
在B.ID上的db.T3中加入C等于C.ID
选择新ABC
{
t1=A,
t2=B,
t3=C
}).ToList();
您的回报目标是什么?你不能定义一个UserDetail类并创建一个IEnumerable吗?我希望能够返回所有行,但我只需要一组行,即var query=Select*from MyDB,其中UserID==db.UserID,return query.firstordefault
var user = userList.FirstOrDefault(a => a.UserId == userId);
class ABC()
{
public List<T1> t1 {get;set;};
public List<T1> t2 {get;set;};
public List<T1> t3 {get;set;};
}
List<ABC> lstABC = new List<ABC>();
lstABC = (from A in db.T1
join B in db.T2 on A.ID equals B.ID
join C in db.T3 on B.ID equals C.ID
select new ABC
{
t1=A,
t2=B,
t3 =C
}).ToList();