【问题标题】:How to manipulate an IQueryable with Linq in ASP.NET Core如何在 ASP.NET Core 中使用 Linq 操作 IQueryable
【发布时间】:2019-12-19 08:43:47
【问题描述】:

我想通过 Javascript PopOver 事件(鼠标悬停)通过如下所示弹出一个窗口来访问给定国家/地区的城市列表

为此,在国家/地区列表中,我有以下代码在 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 () 方法返回一个 IQueryable,我无法使用 Linq 操作国家变量

my countries 变量的结果是...

从上面可以看出,这个方法列出了国家和其中对应的城市

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

我的模态视图当前接收到一个城市模型,我想用以下 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>

我的模型在哪里玩:

国家.CS:

公共类国家:IEntity { 公共 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; } }

}

城市.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);
  }

对我有什么帮助吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    不过,为了使其正常工作,您的 IQueryable-returning 方法应该返回 IQueryable&lt;Country&gt;

    【讨论】:

    • 不,我只想要我徘徊的国家的城市(国家 ID 的城市)@CodeCaster
    • 是的,我添加了 Where()。为什么 id 可以为空?
    • 当应用“where”时,“IQueryable”不包含“Where”的定义,并且找不到接受“IQueryable”类型的第一个参数的可访问扩展方法“Where”(您是否缺少using 指令还是程序集引用?)
    • 我现在注意到您的方法返回一个非泛型 IQueryable。为什么?应该是Iqueryable&lt;Country&gt;
    • 用您应该指定方法为 IQueryable 以接受您的答案的部分补充您的答案
    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多