Проблема с получением строкового значения GUID в запросе Linq-To-Entity

Я пытаюсь записать значение GUID в строку при выборе linq. Код можно увидеть ниже (где c.ID - это 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();

person Fischer    schedule 19.11.2009    source источник


Ответы (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();
person Craig Stuntz    schedule 20.11.2009
comment
Спасибо. Это сработало как шарм. К сожалению, у них нет более простого способа получить строковое значение GUID. - person Fischer; 20.11.2009
comment
Это отлично сработало! Спасибо за понимание. Мне это нравится намного больше, чем прибегать к SqlFunctions.StringConvert, который не работает для что угодно, кроме числа. - person Matt Penner; 01.08.2011

поскольку мое предложение ниже не работает

просмотрите этот вопрос и посмотрите ответ, это может быть решением.

попробуйте это

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

person Fredou    schedule 19.11.2009
comment
Прости. Уже пробовал это. Он говорит, что ToString () не реализован в Linq-To-Entities или что-то в этом роде. - person Fischer; 20.11.2009
comment
Спасибо за усилия, Фреду, но в этой ветке на самом деле не было ответа на мой вопрос. - person Fischer; 20.11.2009