【问题标题】:Creating an XElement item in a Linq expression在 Linq 表达式中创建 XElement 项
【发布时间】:2010-07-08 18:57:37
【问题描述】:

我正在使用 Linq 创建一个对象列表。下面显示的是我正在使用的表达式。我遇到的问题是,在运行时它对“RawXMLDocument = XElement.Parse(t.Message)”行不满意。 “RawXMLDocument”属性采用 XElement。有没有办法将 XML 的字符串版本(保存在 Message 中)转换为 XElement,如下所示?

var transactionList = (from t in ctx.Transactions
                   where t.MessageRecievedAt >= Start && t.MessageRecievedAt <= End
                   select new TerminalTransactionMessage
                   {
                       DeviceId = t.DeviceId,
                       RawXMLDocument = XElement.Parse(t.Message),
                       TransactionTime = t.EventTime_Local
                   }).ToList();

【问题讨论】:

  • 运行时对此有何“不满意”?一个简单的var q = Enumerable.Range(0,10).Select(i =&gt; new { foo = XElement.Parse("&lt;t&gt;"+i.ToString()+"&lt;/t&gt;") }); 在这里工作得很好。
  • 错误是:LINQ To Entities 无法识别方法 'System.Xml.Linq.XElement Parse(System.string)' 方法,并且此方法无法转换为存储表达式。

标签: xml linq


【解决方案1】:

问题在于它试图在 SQL 中执行此操作吗?如果是这样,您只需将要在 SQL 中执行的位和在 LINQ to Objects 中执行的位分开。试试这个:

var query = from t in ctx.Transactions
            where t.MessageRecievedAt >= Start && t.MessageRecievedAt <= End
            select new
            {
                t.DeviceId,
                t.Message,
                TransactionTime = t.EventTime_Local
            };
var transactionList = query.AsEnumerable() // LINQ to Objects from here
                           .Select(t => new TerminalTransactionMessage 
                                   {
                                      DeviceId = t.DeviceId,
                                      RawXMLDocument = XElement.Parse(t.Message),
                                      TransactionTime = t.TransactionTime
                                   });
                           .ToList();

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多