簡體   English   中英

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

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

我想通過一個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操作country變量

我的國家/地區變量的結果是...

調試

如上所示,此方法列出了相應的國家/地區和其中的城市

但是我該如何訪問它們? 如何將CitiesDetailsModal()方法中作為參數接收的CountryId過濾后的列表傳遞給View?

我的模態視圖當前收到一個城市模型,我想用以下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:

公共類國家:IEntity {public int Id {get; 組; }

[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 -returning方法應返回IQueryable<Country>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM