c# - LINQ连接两个表并返回列表

标签 c# mysql linq asp.net-core-mvc

更新:在评论中,很清楚我感到困惑的地方,因此尽管我无法将评论标记为答案,但此问题已解决。实际上,当我使用ViewModel时,一切工作正常,只是在视图中未正确使用它。谢谢你的帮助!

我正在MVC6中建立一个站点。我正在尝试创建一个linq语句以将预订表和场所表连接在一起,然后返回仍在进行的所有预订。我很高兴我的from和join语句以及过滤器都很好。

我有以下代码:

private readonly ApplicationDbContext ctx;

public ForthcomingBookingsViewComponent(ApplicationDbContext c)
{
    ctx = c;
}

public IViewComponentResult Invoke(string filter)
{
    DateTime todaysDate = new DateTime();
    todaysDate = DateTime.Now;

    var res = (from p in ctx.Booking
               join i in ctx.Venue on p.VenueId equals i.VenueId
               where p.DonorId.Equals(filter)
               where p.BookingDate >= todaysDate
               select    )  //This is the line I'm struggling to work out
               .toList();
    return View(res);
}


麻烦来自试图将其列入我认为可以引用的列表中。我尝试了几种方法,首先,我尝试执行以下操作:

select new { p.BookingDate, i.VenueName }


但是问题在于我不确定如何将其称为模型。

然后,我以为可以使用ViewModel,因此可以先定义其中的内容:

   select new FCBViewModel { BookingDate = p.BookingDate, VenueName = i.VenueName })
   .ToList();


但是我又遇到了麻烦,因为这将它设置为单个对象而不是列表。正式化问题:

如何从两个联接的表中返回可以在视图中使用的对象列表?

谢谢!

最佳答案

您可以使用视图模型类在LINQ表达式中进行投影。

public IViewComponentResult Invoke(string filter)
{
    DateTime todaysDate = new DateTime();
    todaysDate = DateTime.Now;

    var fcbVmList = (from p in ctx.Booking
               join i in ctx.Venue on p.VenueId equals i.VenueId
               where p.DonorId.Equals(filter)
               where p.BookingDate >= todaysDate
               select new FCBViewModel { BookingDate = p.BookingDate,
                                         VenueName = i.VenueName })
               .toList();
    return View(fcbVmList);
}


在上面的代码中,变量fcbVmList将是FCBViewModel的列表,您将其传递到视图组件的视图。现在,此列表仅包含一项或n项,这取决于您的where子句和表中的数据。但是它正在返回一个列表。因此,请确保将您的视图强类型化为此类的集合。

@model List<FCBViewModel>
<h2> @Model.Count() Bookings </h2>
@foreach(var item in Model)
{
  <p>@item.VenueName</p>
  <p>@item.BookingDate</p>
}

关于c# - LINQ连接两个表并返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35293306/

相关文章:

c# - Linq-按自定义顺序发出

c# - 将两个 Dictionary<string, List<Model>> 类型的泛型组合成另一个相同类型的泛型

java - HTML 发布请求(登录表单)

c# - 在 C# 中向我的字符串添加 '-'

php - 将对象添加到数组 - 覆盖而不是添加

mysql - Hive 中未显示的特殊字符

c# - 当 DateTime 字段为 null 时 LINQ 中的 "Specified cast is not valid"

c# - 验证空值转换

php - 无法访问 ajax 发送的 php 页面上的数据?

c# - 为什么编译器不能推断此选择调用的类型?