簡體   English   中英

無法將類型'System.Linq.IQueryable <int>'隱式轉換為'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)。 如果您想獲得其中一個,您可以調用FirstElementAt(n)來獲取第n個元素。

cit.CountryID = db.Countries.First(a=>a.DOTWInternalID == citee.CountryCode).ID

暫無
暫無

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

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