我只是想知道,根据下面的代码,是否有更好的方法从多行获取数据而不是创建列表列表?
这不是一个真正的问题,更多的是代码味道,因为一个人可能有50多行,这种解决方案在那种情况下是不切实际的。
任何和所有帮助将不胜感激=]
class Manage
{
List<string> UserNames = new List<string>();
List<string> Lockoutenabled = new List<string>();
List<string> AccessFailedCount = new List<string>();
List<List<string>> Details = new List<List<string>>();
VatsWebEntitiesManage ManageEntity = new VatsWebEntitiesManage();
public List<List<string>> 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 item in usernames)
{
UserNames.Add(item);
}
foreach (var item in lockouts)
{
Lockoutenabled.Add(item.ToString());
}
foreach (var item in AccessFailedCounts)
{
AccessFailedCount.Add(item.ToString());
}
Details.Add(UserNames);
Details.Add(Lockoutenabled);
Details.Add(AccessFailedCount);
return (Details);
}
}
答案 0 :(得分:2)
为什么没有具有Username,lockoutenabled和accessfailedcount属性的类UserDetails(甚至只是使用AspNetUser类)。然后加载它并返回它的IEnum。
return from u in ManageEntity.AspNetUsers
select new UserDetails{
Username = u.UserName,
Lockouts = u.LockoutEnabled,
AccessFailedCounts = u.AccessFailedCount
};
答案 1 :(得分:1)
您应该阅读有关EF的一些细节。 我想你要存档:
我只是说明一个列表如下:
var usernames = ManageEntity.AspNetUsers.AsQueryable().Select(m => m.UserName).ToList();
ToList()
获取一个列表。 AsQueryable()
不会加载所有数据
D B。所以获得更好的表现。希望它对你有用。
答案 2 :(得分:0)
最好拥有一个包含所需属性的类:
public class UserDetail
{
public String UserName {get; set;}
public String LockoutEnabled {get; set;}
public String AccessFailedCount {get; set;}
}
然后创建一个UserDetails列表,如:
var list = (from u in ManageEntity.AspNetUsers
select new UserDetail
{
UserName = u.UserName,
LockoutEnabled = u.LockoutEnabled,
AccessFailedCounts = u.AccessFailedCount
}).ToList();
请原谅任何语法问题,我远离我的代码编辑器:)
答案 3 :(得分:0)
首先:使用
using (var c = ManageEntity())
{
// Your code
}
我没有理解你的List<List<string>>
。如果所有数据都已连接,您可以创建一个包含所需属性的类并填充它。
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()
}
}
像这样:)
答案 4 :(得分:0)
我认为你们大多数人都对你在这里要完成的事情感到困惑。做我认为你尝试做的事情的典型方法是拥有像
这样的功能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;
}
}
虽然我不确定为什么你希望列表成为该类的属性,也是一个返回列表的函数..无论如何..那么你只需要取List<AspNetUser>
和获取您需要的信息..
如果您需要所有用户名列表。
var userList = FetchUserDetails();
var names = userList.Select(a => a.UserName).ToList(); //List<string>
var lockouts = userList.Select(a => a.Lockouts.ToString()).ToList(); //List<string>
如果您想要第一个用户或具有特定ID的用户。
var user = userList.FirstOrDefault(a => a.UserId == userId);
答案 5 :(得分:0)
是的,您可以创建一个包含表格属性的类 在加入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();