[英]Unable to cast object of type WhereSelectEnumerableIterator`2[Models.AddonBatch,System.DateTime] to type System.IConvertible
[英]Unable to cast object of type 'WhereSelectEnumerableIterator
我正在尝试将我的xml结果转换为IQueryable,从而导致此错误:
An unhandled exception of type 'System.InvalidCastException' occurred in weatherxml.exe
Additional information: Unable to cast object of type 'WhereSelectEnumerableIterator`2[System.Linq.IGrouping`2[System.String,System.Xml.Linq.XElement],System.Linq.IGrouping`2[System.String,System.Xml.Linq.XElement]]' to type 'System.Linq.IQueryable`1[weatherxml.Station]'.
我该如何转换以获得正确的电台转换? 参见下面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace weatherxml
{
class Program
{
static void Main(string[] args)
{
string xmlData = @"<Observations><Observation><Station>ADELONG POST OFFICE</Station><DateTime>2010-09-02T00:00:00</DateTime><Temperature>19.212989033764689</Temperature></Observation><Observation><Station>ADELONG POST OFFICE</Station><DateTime>2010-09-01T00:00:00</DateTime><Temperature>28.529448969536205</Temperature></Observation><Observation><Station>ALBURY AIRPORT</Station><DateTime>2010-09-01T00:00:00</DateTime><Temperature>34.687027630716109</Temperature></Observation><Observation><Station>ALBURY AIRPORT AWS</Station><DateTime>2010-09-01T00:00:00</DateTime><Temperature>28.131385570453197</Temperature></Observation></Observations>";
XDocument weatherData = XDocument.Parse(xmlData);
var query = from item in weatherData.Descendants("Observation")
group item by (string)item.Element("Station")
into g
select g;
foreach (var q in query)
{
var maxDate = q.Max(o => DateTime.Parse((string)o.Element("DateTime")));
var latestObservation = q.FirstOrDefault(o => DateTime.Parse((string)o.Element("DateTime")) == maxDate);
var newStation = new Station();
newStation.Name = q.Key;
newStation.MostRecentDate = maxDate;
newStation.LastTemperature = Decimal.Parse((string)latestObservation.Element("Temperature"));
}
var stations=(IQueryable<Station>)query;
Console.ReadLine();
}
}
public class Station
{
public string Name { get; set; }
public DateTime MostRecentDate { get; set; }
public decimal LastTemperature { get; set; }
}
}
您应该将foreach
集成到LINQ查询中:
var query = from item in weatherData.Descendants("Observation")
group item by (string)item.Element("Station") into g
let maxDate = g.Max(o => (DateTime)o.Element("DateTime"))
let latestObservation = g.FirstOrDefault(o => (DateTime)o.Element("DateTime") == maxDate)
select new Station()
{
Name = g.Key,
MostRecentDate = maxDate,
LastTemperature = (decimal)latestObservation.Element("Temperature")
}
但是它将给您IEnumerable<Station>
而不是IQueryable<>
。 您可以通过调用AsQueryable()
方法来获取IQueryable<Station>
,但这实际上没有任何意义。
另外,您可以将XElement
直接转换为DateTime
和Decimal
,而不是先转换为string
然后再调用Parse
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.