【问题标题】:Using query results with joined parameters without anonymous type使用没有匿名类型的连接参数的查询结果
【发布时间】:2015-04-16 15:12:05
【问题描述】:

改编自this C# MVC tutorial 我正在使用以下语句将特定用户返回到视图

User user = db.Users.Find(id);

if (user == null){return HttpNotFound();}
return View(user);

Users 模型有一个指向Auctions 的外键,因此视图可以遍历与该用户关联的拍卖列表。

Auctions 有一个名为buyerID 的字段与User.ID 对应,因此我想通过Auctions.buyerID 链接回User.userName 来显示买家姓名。

我也可以在 SQL 语句和 LINQ 中执行此操作,但我认为有更简单的方法。

如何使用User user = db.Users.Find(id); 并将其从Auctions.buyerID 的外键加入User


这是我认为可行的方法,但当用户没有此参数时,我无法创建新参数“buyerName”。

IEnumerable<User> thisUser = from usr in db.Users
       join auct in db.Auctions on usr.ID equals auct.UserID
       join ur in db.Users on auct.buyerID equals ur.ID
       where usr.ID == id
       select new User
       {
           buyerName = ur.userName
       };

like this one 的其他帖子中,我读到了有关设置新课程的信息,但这似乎不符合 DRY 和 KISS 原则,因为现在我需要在不同位置有两个因一个参数而异的课程。

有没有更简单的方法来加入表格并在不创建新类的情况下获得强类型?

所以结果应该显示买家姓名而不是买家 ID#


【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    由于我想避免使用匿名类型并且我不想创建一个新类,因此我通过将用户名字典传递给视图来找到解决方法。

    控制器

    User user = db.Users.Find(id);
    
    var dict = db.Users.Select(t => new { t.ID, t.userName })
               .ToDictionary(t => t.ID, t => t.userName);
    
    ViewData["userDict"] = dict;
    

    现在我只是根据买家 ID 查找用户名

    查看

    @{Dictionary<int, String> userList = ViewData["userDict"] as Dictionary<int, String>;}
    
    @{
      if (item.buyerID.HasValue)
      {
        @Html.DisplayFor(modelItem => userList[item.buyerID.Value])
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多