如何在 ASP.NET Core 中使用 Linq 操作 IQueryable

How to manipulate an IQueryable with Linq in ASP.NET Core

我想通过 Javascript PopOver 事件(鼠标悬停)访问给定国家/地区的城市列表,方法是引发 window,如下所示

为此,在国家/地区列表中,我有以下代码在 CountryController

中执行以下方法
<td>
<a href="#" data-toggle="popover" data-trigger="hover" id="@item.Id">@item.NumberCities</a>

 </td>

      <script>
            $(document).ready(function () {
                $('[data-toggle="popover"]').popover({
                    title: setData,
                    html: true,
                    placement: 'right'
                });

                function setData($id)
                {
                    var set_data = '';
                    var element = $(this);
                    var id = element.attr("id");
                    $.ajax({
                        url: "/Countries/CitiesDetailsModal/" + id,
                        method: "post",
                        async: false,
                        data: { id: id },
                        success: function (data)
                        {
                            set_data = data;
                        }
                    });

                    return set_data;

                }
            });
        </script>

CountryController.CS:

 public ActionResult CitiesDetailsModal(int? id)
 {
      var paises = countryRepository.GetCountriesWithCities();

      return View();
 }

问题是我的 GetCountriesWithCities () 方法 returns 是一个 IQueryable,我无法使用 Linq

操作国家变量

我的国家变量的结果是...

如上所示,此方法列出了国家和其中对应的城市

但是我怎样才能访问它们呢?如何将按 CitiesDetailsModal () 方法中的参数接收的 CountryId 筛选的列表传递给查看?

我的模态视图当前收到一个城市模型,我想用以下 CitiesDetailsModal.CSHTML 格式显示它

@model IEnumerable<SoftwareCore.Common.Models.City>

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

<h4>Citys</h4>

<div class="container">

    @foreach (var item in Model)
    {      
        <p><label>Nombre:</label> @item.Name)</p>      
    }

</div>

我的模型在哪里:

Country.CS:

public class 国家:IEntity { public int Id { 得到;放; }

[Required]
[Display(Name = "Country")]
[MaxLength(50, ErrorMessage = "The field {0} only can contain {1} characters length.")]
public string Name { get; set; }

public ICollection<City> Cities { get; set; }

[Display(Name = "# Cities")]
public int NumberCities { get { return this.Cities == null ? 0 : this.Cities.Count; } }

}

City.CS:

public class City : IEntity
    {
        public int Id { get; set; }

        [Required]
        [Display(Name = "City")]
        [MaxLength(50, ErrorMessage = "el campo {0} solo puede contener {1} caracteres de largo.")]
        public string Name { get; set; }
    }

如何从我的 CitiesDetailsModal () 方法中显示城市列表?

我必须更改我的方法 GetCountriesWithCities () 吗??或者我可以通过 Linq 驱动 IQueryable 吗?

  public IQueryable GetCountriesWithCities()
  {
     return this.context.Countries.Include(c => c.Cities).OrderBy(c => c.Name);
  }

对我有什么帮助吗?

所以您要查询所有国家/地区,但想要所选国家/地区的所有城市?

然后过滤并投影这些,将它们具体化为一个列表并将其发送到您的视图:

var allCities = paises.Where(c => c.Id == id.Value)
                      .SelectMany(c => c.Cities).ToList();
return View(allCities);

不过,为了使其正常工作,您的 IQueryable-返回方法应该返回 IQueryable<Country>