Ane*_*eef 31 c# linq iqueryable
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;
}
Run Code Online (Sandbox Code Playgroud)
我在第二个查询中收到错误,如本文标题所示.我试着转换成int以nullable int,但毫无效果.帮我,伙计们.
谢谢
Pha*_*bus 45
它会返回一个iQueryable,你需要做一些像使用First的东西
cit.CountryID = db.Countries.First(a=>a.DOTWInternalID == citee.CountryCode).ID
Run Code Online (Sandbox Code Playgroud)
Cha*_*les 12
自上次更新帖子以来已经过了很长时间,但我认为值得改进解决方案.
在我看来,针对此特定方案发布的解决方案并不是获得所需ID的最佳方式.更好的解决方案如下.
db.Countries.Where(a=>a.DOTWInternalID == citee.CountryCode)
.Select(a => a.ID).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
以前的statemants基本上运行类似于以下的SQL查询:
SELECT TOP (1) ID
FROM [dbo].[Countries]
WHERE DOTWInternalID = 123
Run Code Online (Sandbox Code Playgroud)
建议的解决方案可以工作,但基本上做一个"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;
Run Code Online (Sandbox Code Playgroud)
这将解决您的问题.
| 归档时间: |
|
| 查看次数: |
61852 次 |
| 最近记录: |