使用没有匿名类型的连接参数的查询结果

时间:2014-12-12 04:54:38

标签: c# asp.net-mvc linq

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

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

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

Users模型具有Auctions的外键,因此视图可以迭代与此用户关联的拍卖列表。

Auctions有一个名为buyerID的字段,与User.ID对应,因此我希望通过User.userName链接回Auctions.buyerID来显示买方名称}。

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

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


这是我认为可行的,但我无法创建新参数' 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我读过有关设置新课程的内容,但似乎并没有坚持干嘛和KISS原则从现在开始我需要有两个类,它们由位于不同位置的一个参数改变。

是否有更简单的方法来加入表格并获得强类型而无需创建新类?

因此结果应显示买方名称而不是买方ID#


enter image description here

1 个答案:

答案 0 :(得分:0)

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

控制器

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])
  }
}