2

我有 2 个使用 EF w/MVC4 的数据库。我已经通过 SO 进行了搜索。我需要将警报列表返回到部分视图。但是,警报应该由具有特定标识符的特定用户名过滤。视图是强类型的,我想保持这种状态。

我有 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());
        }
    }

底线:我想仅使用查询列表的用户名属性中的值交叉引用 db.Alerts。

4

1 回答 1

1

根据您的问题,您希望将警报范围缩小到您在查询中有用户名的警报。看起来您已经完成了,只是不要选择用户名,而是选择警报

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

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

于 2013-04-16T08:09:17.767 回答