2015-10-20 70 views
-2

我只是想知道,根据下面的代码,是否有更好的方法来从多行获取数据,而不是创建列表列表?有没有更好的方法来选择实体框架中的多行?

这不是一个真正的问题,更像是代码味道,因为人们可能有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); 
    } 
} 
+1

你的目标是重返?你不能只是定义一个UserDetail类,并创建一个IEnumerable它们? –

+0

我希望能够返回所有行,但我只需要一组行I.E'var query = Select * from MyDB where UserID == db.userID,return query.firstordefault' –

回答

2

你为什么不有一个类的UserDetails(甚至只是用AspNetUser类),已经用户名,lockoutenabled和accessfailedcount作为属性。然后加载并返回IEnum。

return from u in ManageEntity.AspNetUsers 
    select new UserDetails{ 
     Username = u.UserName, 
     Lockouts = u.LockoutEnabled, 
     AccessFailedCounts = u.AccessFailedCount 
    }; 
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(); 

赦免任何语法问题,我远离我的代码编辑器:)

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() 
      } 

    } 

像这样的东西:)

0

你应该阅读有关EF一些细节。 我觉得要存档:

  1. 得到行的列表
  2. 最佳性能

我只是demostrate名单如下:

var usernames = ManageEntity.AspNetUsers.AsQueryable().Select(m => m.UserName).ToList(); 
  1. ToList()得到名单。
  2. AsQueryable()将不会加载来自 DB的所有数据。因此获得更好的性能

。希望这是对你有用。

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); 
0

是的,你可以创建表格的属性和 得到毕竟所需的值加入所有的表,但外键关系是需要 类。

例如

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(); 
相关问题