2015-10-20 69 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(); 
相關問題