繁体   English   中英

有没有更好的方法在实体框架中选择多行?

[英]Is there a better way to select multiple rows in Entity Framework?

我只是想知道,按照下面的代码,有没有比创建列表列表更好的方法来从多行获取数据?

这不是一个真正的问题,因为一个人可能有 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);
    }
}

为什么没有类 UserDetails(甚至只使用 AspNetUser 类),它具有 Username、lockoutenabled 和 accessfailedcount 作为属性。 然后加载它并返回它的IEnum。

return from u in ManageEntity.AspNetUsers
    select new UserDetails{
        Username = u.UserName,
        Lockouts = u.LockoutEnabled,
        AccessFailedCounts = u.AccessFailedCount
    };

您应该阅读有关 EF 的一些详细信息。 我想你想存档:

  1. 从行中获取列表
  2. 最棒的表演

我只是演示了一个列表如下:

  var usernames = ManageEntity.AspNetUsers.AsQueryable().Select(m => m.UserName).ToList();
  1. ToList()获取列表。
  2. AsQueryable()不会从数据库加载所有数据。 所以获得更好的表现

.希望对你有用。

最好有一个包含您需要的所有属性的类:

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

请原谅任何语法问题,我离我的代码编辑器很远:)

首先:使用 using

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

    }

像这样的东西:)

我认为您已经让我们大多数人对您在这里尝试完成的事情感到困惑。 做我认为你想做的事情的典型方法是拥有一个像

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

是的,您可以使用表的属性创建一个类,并在加入所有表后获取所有必需的值,但需要外键关系。

例子

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM