[英]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.