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# 使用LINQ传递自定义列表的PartialView_C#_Linq_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

C# 使用LINQ传递自定义列表的PartialView

C# 使用LINQ传递自定义列表的PartialView,c#,linq,entity-framework,asp.net-mvc-4,C#,Linq,Entity Framework,Asp.net Mvc 4,我有两个数据库使用EF w/MVC4。我已经找遍了所以有用。我需要将警报列表返回到局部视图。但是,警报应通过具有特定标识符的特定用户名进行过滤。视图是强类型的,我希望保持这样 我让LINQ查询返回到一个列表,它是与特定id关联的用户名列表。您可以在第二个case语句中看到两个表的查找需要转到哪里。我希望在没有viewmodel类的情况下执行此操作 代码如下: public PartialViewResult DashboardAlerts() { Database

我有两个数据库使用EF w/MVC4。我已经找遍了所以有用。我需要将警报列表返回到局部视图。但是,警报应通过具有特定标识符的特定用户名进行过滤。视图是强类型的,我希望保持这样

我让LINQ查询返回到一个列表,它是与特定id关联的用户名列表。您可以在第二个case语句中看到两个表的查找需要转到哪里。我希望在没有viewmodel类的情况下执行此操作

代码如下:

    public PartialViewResult DashboardAlerts()
    {
        Database.SetInitializer<AlertsContext>(null);
        AlertsContext db = new AlertsContext();

        Database.SetInitializer<MemberUsersContext>(null);
        MemberUsersContext mdb = new MemberUsersContext();

        var members = new List<MemberUsers>(mdb.MemberUsers);
        var alerts = new List<Alerts>(db.Alerts);

        var query = from x in alerts
                    join y in members
                    on x.username equals y.username
                    where y.clubID == (int)Session["ClubID"]
                    select new { username = y.username};

        var list = query.ToList();

        switch (Session["RoleName"].ToString())
        {
            case "GMC Admin": return PartialView(db.Alerts.ToList());
            case "Club Admin": return //return db.Alerts.ToList() that has only usernames from query.ToList();
            default: return PartialView(db.Alerts.Where(x => x.username == User.Identity.Name).ToList());
        }
    }
public PartialViewResult仪表板警报()
{
Database.SetInitializer(null);
AlertsContext db=新的AlertsContext();
Database.SetInitializer(null);
MemberUsersContext mdb=新的MemberUsersContext();
var members=新列表(mdb.MemberUsers);
var警报=新列表(数据库警报);
var query=来自警报中的x
加入y会员
在x.username上等于y.username
其中y.clubID==(int)会话[“clubID”]
选择新建{username=y.username};
var list=query.ToList();
开关(会话[“RoleName”].ToString())
{
案例“GMC Admin”:返回PartialView(db.Alerts.ToList());
case“Club Admin”:return//return db.Alerts.ToList(),它只有query.ToList()中的用户名;
默认值:返回PartialView(db.Alerts.Where(x=>x.username==User.Identity.Name).ToList());
}
}

一句话:我想交叉引用db.Alerts,其中只包含来自查询列表的username属性的值。

从您的问题中,您可以使用将警报范围缩小到查询中包含usename的警报。看起来您已经完成了,只是不选择用户名,而是选择警报

var query = from x in alerts
                join y in members
                on x.username equals y.username
                where y.clubID == (int)Session["ClubID"]
                select x;

这将返回警报,而不是用户名列表。

您是否考虑过使用ViewBag将其发送到视图?我是否可以使用ViewBag将其强键入?ViewBag和model是将数据传递到视图的独立方式,并且相互排斥。由于viewbag是一个动态对象,您只需在操作中将该项添加到viewbag中,然后在视图中检查该值是否存在,并根据该值编写代码?但是,您需要一个针对模型的强类型视图。至少说来很奇怪。为什么要在没有ViewModel的情况下执行此操作?我之所以这样说,是因为很可能有更好的方法来处理ViewModel,但您可能有一些想法,使您认为您不能使用ViewModel。@Kenneth,我走了ViewBag路线,最终创建了一个ViewModel类。谢谢你的建议。我不想偏离最初使用MVC4中包含的编辑、详细信息和删除临时值创建的IENumerator框架,但现在我了解了更多,传递IENumerator模型对ViewBag来说并不重要。实际上,我可以同时使用IEnumerator强类型模型和ViewBag!