C# 重构绑定到类的模型控制器代码

C# 重构绑定到类的模型控制器代码,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我目前在控制器中有以下代码。 这里看起来有点混乱,我宁愿将JQuery重构为一个类。 我将需要这个数据库信息在网站内的许多地方,这似乎是一个遗憾,没有重复使用查询 可以在课堂上这样做吗?我不确定返回它的对象是什么,就像代码在类中一样 var profileViewModel = (from da in db.table1 from ra in db.table2.Where(_ra => da.someID == _ra.so

我目前在控制器中有以下代码。 这里看起来有点混乱,我宁愿将JQuery重构为一个类。 我将需要这个数据库信息在网站内的许多地方,这似乎是一个遗憾,没有重复使用查询

可以在课堂上这样做吗?我不确定返回它的对象是什么,就像代码在类中一样

var profileViewModel = (from da in db.table1
                                from ra in db.table2.Where(_ra => da.someID == _ra.someID).DefaultIfEmpty()
                                from rg in db.table3.Where(_rg => da.someID2 == _rg.someID2).DefaultIfEmpty()
                                from re in db.table4.Where(_re => da.someID3 == _re.someID3).DefaultIfEmpty()
                                where da.UserName == model.mUserName
                                select new ManageUserAccountsViewModel
                                {
                                    FirstName = ra.FirstName,
                                    Surname = ra.Surname,
                                    Email = da.UserName, 
                               });

首先,您希望使您的哑存储成为POCO。就这么说吧

public class DumbStoragePoco { 
    public string FirstName {get;set;} 
    public string Surname {get;set;} 
    public string Email {get;set;}
}
现在,我们继续为它创建一个数据访问层类

public class UserAccountData {
    private readonly DbContext _context;
    public UserAcctionData(DbContext context) { _context = context; }

    public Get(string username) {
        return from da in _context.table1
        from ra in _context.table2.Where(_ra => da.someID == _ra.someID).DefaultIfEmpty()
        from rg in _context.table3.Where(_rg => da.someID2 == _rg.someID2).DefaultIfEmpty()
        from re in _context.table4.Where(_re => da.someID3 == _re.someID3).DefaultIfEmpty()
        where da.UserName == username
        select new DumbStoragePoco
        {
            FirstName = ra.FirstName,
            Surname = ra.Surname,
            Email = da.UserName, 
        });
}

现在,您可以在控制器中实例化UserAccountData,并使用用户名调用Get方法来获取DumbStoragePoco的实例,然后可以将其传递到您可能需要的任何ViewModel中。如果希望进一步抽象,可以围绕数据访问调用实现存储库模式。您可以从UserAccountData中提取接口,并将其与依赖项注入和控制容器反转一起使用,以创建进一步的抽象,使控制器所做的只是在其构造函数中接受适当的接口,并针对预期的返回类型对其进行调用。

在哪个构造函数中?如果您想在多个控制器中生成
var profileViewModel
,可以在BaseController中创建一个受保护的方法,该方法返回sorry,我是说controller,我现在就编辑帖子