![](/img/trans.png)
[英]Cannot convert type 'System.Linq.IQueryable<int>' to 'int'
[英]Cannot implicitly convert type 'System.Linq.IQueryable<int>' to 'int?'
var cityList = from country in
doc.Element("result")
.Element("cities")
.Descendants("city")
select new {
Name = country.Element("name").Value,
Code = country.Element("code").Value,
CountryCode = int.Parse(country
.Element("countrycode")
.Value)
};
foreach(var citee in cityList)
{
City city = new City();
city.CountryID = from cnt in db.Countries
where cnt.DOTWInternalID == citee.CountryCode
select cnt.ID;
}
我在第二個查詢中收到錯誤,如本文標題所示。 我嘗試將int
轉換為nullable int
但沒有任何效果。 幫我,伙計們。
謝謝
它會返回一個iQueryable,你需要做一些像使用First的東西
cit.CountryID = db.Countries.First(a=>a.DOTWInternalID == citee.CountryCode).ID
自上次更新帖子以來已經過了很長時間,但我認為值得改進解決方案。
在我看來,針對此特定方案發布的解決方案並不是獲得所需ID的最佳方式。 更好的解決方案如下。
db.Countries.Where(a=>a.DOTWInternalID == citee.CountryCode)
.Select(a => a.ID).FirstOrDefault();
以前的statemants基本上運行類似於以下的SQL查詢:
SELECT TOP (1) ID
FROM [dbo].[Countries]
WHERE DOTWInternalID = 123
建議的解決方案可以工作,但基本上做一個"SELECT *"
來創建具有所有值的實體,然后從剛創建的對象中獲取ID。
您可以使用Linqpad實際查看生成的SQL並調整LINQ查詢或Lambdas。
希望它有助於其他一些人來到這篇文章。
這是問題和解決方案
來自db.Countries中的cnt,其中cnt.DOTWInternalID == citee.CountryCode選擇cnt.ID部分。 如果省略ID,則返回帶有Country的Generic IEnumerable(希望您有Country類)。 所以你要做的就是首先返回選擇標准,然后選擇第一行,然后選擇ID字段。 同樣如下所示。
cit.CountryID = (from cnt in db.Countries where cnt.DOTWInternalID == citee.CountryCode select cnt).First<Country>().ID;
這將解決您的問題。
IQueryable不是單個int - 而是可以表示集合的查詢。
正如錯誤消息所示,您的Linq查詢返回一個System.Linq.IQueryable(所有意圖和目的都是一組int)。 如果您想獲得其中一個,您可以調用First或ElementAt(n)來獲取第n個元素。
cit.CountryID = db.Countries.First(a=>a.DOTWInternalID == citee.CountryCode).ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.