2010-07-08 31 views
0

我正在使用Linq創建對象列表。下面顯示的是我正在使用的表達式。我遇到的問題是,在運行時它對「RawXMLDocument = XElement.Parse(t.Message)」行不滿意。 「RawXMLDocument」屬性需要XElement。有沒有辦法將XML的字符串版本(保存在消息中)轉換爲XElement,如下所示?在Linq表達式中創建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(); 
+0

如何運行「不快樂」這件事?一個簡單的'var q = Enumerable.Range(0,10).Select(i => new {foo = XElement.Parse(「」+ i.ToString()+「」)});'在這裏工作得很好。 – Jens 2010-07-08 10:56:00

+0

錯誤是:LINQ To Entities無法識別方法'System.Xml.Linq.XElement Parse(System.string)'方法,並且此方法無法轉換爲存儲表達式。 – Retrocoder 2010-07-08 11:00:55

回答

4

問題是它試圖在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(); 
+0

這樣做,非常感謝。 – Retrocoder 2010-07-08 11:07:51