2009-11-19 29 views
1

我正在尝试在LINQ select中为GUID值写入一个字符串。代码可以在下面看到(其中c.ID是GUID),但出现以下错误:在Linq-To-Entity查询中获取GUID字符串值时出现问题

无法将类型'System.Guid'强制类型为'System.Object'。 LINQ to Entities仅支持投射实体数据模型基元类型。

var media = (
       from media in Current.Context.MediaSet 
       orderby media.CreatedDate 
       select new Item 
       { 
        Link = "~/Media.aspx?id=" + media.ID, 
        Text = "Media", 
        Time = media.CreatedDate 
       } 
      ).ToList(); 
+0

我更新了我的答案 – Fredou

回答

2

一种方法是掰开查询到L2E和L2O:

var q = from media in Current.Context.MediaSet 
     orderby media.CreatedDate 
     select new 
     { 
      Id = media.ID, 
      Time = media.CreatedTime 
     }; 
var media = (
       from m in q.AsEnumerable() 
       select new Item 
       { 
        Link = "~/Media.aspx?id=" + q.Id.ToString, 
        Text = "Media", 
        Time = q.Time 
       } 
      ).ToList(); 
+0

谢谢。这工作像一个魅力。不好的是,他们没有一个简单的方法来获取GUID的字符串值。 – Fischer

+1

这工作得很好!感谢您的洞察力。我喜欢这一点比不得不求助于[SqlFunctions.StringConvert](http://stackoverflow.com/questions/1228318/linq-int-to-string),它不适用于数字以外的其他任何东西。 –

0

因为我下面的建议并没有在this question工作

看看,看看答案,这可能是解决方案。

试试这个

var media = (
       from media in Current.Context.MediaSet 
       orderby media.CreatedDate 
       select new Item 
       { 
        Link = "~/Media.aspx?id=" + media.ID.toString(), 
        Text = "Media", 
        Time = media.CreatedDate 
       } 
      ).ToList(); 

+0

对不起。已经尝试过那一个。它说ToString()没有在Linq-To-Entities或类似的东西中实现。 – Fischer

+0

感谢Fredou的努力,但那个帖子并没有真正解决我的问题。 – Fischer