Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中有更好的选择多行的方法吗?_C#_Linq_Generics_Collections - Fatal编程技术网

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

C# 在实体框架中有更好的选择多行的方法吗?,c#,linq,generics,collections,C#,Linq,Generics,Collections,我只是想知道,有没有比按照下面的代码创建列表更好的方法从多行获取数据 这不是一个真正的问题,更多的是一种代码味道,因为一个人可能有50多行,而这种解决方案在这种情况下是不切实际的 任何和所有的帮助都将不胜感激=] 类管理 { 列表用户名=新列表(); List Lockoutenabled=新列表(); List AccessFailedCount=新列表(); 列表详细信息=新列表(); vatswebentitiesmanageentity=新的VatsWebEntitiesManage()

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

这不是一个真正的问题,更多的是一种代码味道,因为一个人可能有50多行,而这种解决方案在这种情况下是不切实际的

任何和所有的帮助都将不胜感激=]

类管理
{
列表用户名=新列表();
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();