代码之家  ›  专栏  ›  技术社区  ›  Retrocoder

在Linq表达式中创建XElement项

  •  0
  • Retrocoder  · 技术社区  · 14 年前

    我用Linq创建一个对象列表。下面是我使用的表达式。我的问题是,在运行时它对RawXMLDocument=XElement.Parse(t.Message)行不满意。RawXMLDocument属性采用XElement。有没有办法将XML的字符串版本(保存在消息中)转换成如下所示的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();
    
    1 回复  |  直到 14 年前
        1
  •  4
  •   Jon Skeet    14 年前

    问题是它试图用SQL来实现吗?如果是这样,您只需要将SQL中要执行的位和linqto对象中要执行的位分开。试试这个:

    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();