【问题标题】:How to get values from four joined tables to the view in EF如何从四个连接表中获取值到 EF 中的视图
【发布时间】:2023-03-07 20:00:01
【问题描述】:

我的问题是如何从最后一个表中获取列数据,例如 countryid countryname 我想在视图页面中显示这个值

控制器

var dt = db.Types.Where(x => x.TypeId == id).FirstOrDefault();
            var item = dt;

            var di = db.Items.Where(x => x.TypeId == item.TypeId).ToList();
            foreach (var item1 in di)
            {
                var dic = db.ItemsCountries.Where(x => x.ItemId == item1.ItemId).ToList();
                foreach (var ee in dic)
                {
                    var eee = db.Entities.Where(x => x.EntityId == ee.EntityId).ToList();
                    foreach (var c in eee)
                    {
                        var country = db.Countries.Where(x => x.CountryId == c.CountryId).Distinct().ToList();

                        var projects = country.GroupBy(x => x.CountryId)
                            .Select(group => new { group.Key, l = group.ToList() }).ToList().Take(10);

                        

                        return View(projects);

                    }

                }

}

            }

型号:

@model IEnumerable<website.Models.types>


@{ ViewData["Title"] = "ProjectsView";}

在视图中我无法获得智能感知中的第四个表格列 我不知道我做错了什么。

                    @if (Model != null)
                    {
                @foreach (var item in Model)
                {


                <ul class="country">
                    <li><a href=""></a>@item.</li>


                </ul>} }

【问题讨论】:

  • 请查看post code,在控制器动作方法中,它会返回一个新的列表对象,而不是类型模型。另外,return 命令在 foreach 语句中,请确保您没有发布错误代码?

标签: c# asp.net-mvc asp.net-core .net-core


【解决方案1】:
var dt = db.Types.Where(x => x.TypeId == id).FirstOrDefault();
            var item = dt;

            var di = db.Items.Where(x => x.TypeId == item.TypeId).ToList();
            foreach (var item1 in di)
            {
                var dic = db.ItemsCountries.Where(x => x.ItemId == item1.ItemId).ToList();
                foreach (var ee in dic)
                {
                    var eee = db.Entities.Where(x => x.EntityId == ee.EntityId).ToList();
                    foreach (var c in eee)
                    {
                        var country = db.Countries.Where(x => x.CountryId == c.CountryId).Distinct().ToList();

                        var projects = country.GroupBy(x => x.CountryId)
                            .Select(group => new { group.Key, l = group.ToList() }).ToList().Take(10);
 
                        return View(projects);

                    } 
                }
             }
            }

也许问题是您没有在 Linq select 语句中分配对象名称。

请检查以上代码,由于return View(projects);位于foreach语句中,在第一次循环时,会返回View并通过循环退出。

如果想用这个方法来显示数据,试着像这样修改你的代码(在select语句中添加对象名称):

types 类(假设它包含以下属性):

public class types
{
    public int ID { get; set; }
    public int CountryId { get; set; }
    public string CountryName { get; set; } 
}

修改如下代码:

  var projects = country.GroupBy(x => x.CountryId)
                            .Select(group => new { group.Key, l = group.ToList() }).ToList().Take(10);
   return View(projects);

到:

  var projects = country.GroupBy(x => x.CountryId)
                            .Select(group => new types{ CountryId = group.Key, CountryName  = group.ToList().FirstOrDefault().CountryName }).ToList().Take(10);

  return View(projects);

在我看来,我猜您想显示所有国家/地区信息。如果是这样,你可以在 Foreach 语句之外定义一个 List 对象(例如 typeslist),然后在 Foreach 语句中,循环遍历类型后,可以将选择的国家插入到列表中,最后可以返回countryList 到视图。

示例代码如下:

        var dt = db.Types.Where(x => x.TypeId == id).FirstOrDefault();
        var item = dt;

        //define a list to store the select types
        List<types> typesList = new List<types>();
        var di = db.Items.Where(x => x.TypeId == item.TypeId).ToList();
        foreach (var item1 in di)
        {
            var dic = db.ItemsCountries.Where(x => x.ItemId == item1.ItemId).ToList();
            foreach (var ee in dic)
            {
                var eee = db.Entities.Where(x => x.EntityId == ee.EntityId).ToList();
                foreach (var c in eee)
                {
                    var country = db.Countries.Where(x => x.CountryId == c.CountryId).Distinct().ToList();

                    List<types> projects = country.GroupBy(x => x.CountryId)
                        .Select(group => new types{ CountryId = group.Key, CountryName = group.ToList().FirstOrDefault().CountryName }).ToList().Take(10);

                    //insert the selected items into the typeslist
                    typesList.AddRange(projects);
                    //return View(projects);
                } 
            } 
        }
        // return the typeslist to the view.
        return View(typesList);

然后,在查看页面中,您可以使用以下代码来显示数据。

@model IEnumerable<MVCSample.Models.types>

@{
    ViewData["Title"] = "Default";
}
              
@if (Model != null)
{
    @foreach (var item in Model)
    {


        <ul class="country">
            <li><a href=""></a>@item.CountryId @item.CountryName </li>


        </ul>}}

输出如下:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多