Относительно ArrayIndex внутри Linq Query - PullRequest
2 голосов
/ 13 февраля 2012

у меня есть тип узла выражения LINQ ArrayIndex не поддерживается в ошибке LINQ to Entities, когда я пытаюсь сделать следующее

public List<AttachmentList> ShowAttachments(int type, int ReferenceId)
{

    try
    {
        var attachmentNames =
            (from attachment in tent.Attachments
                where (attachment.Attachment_Type == type
                    && attachment.Attachment_Reference_Pk == ReferenceId)
                select new AttachmentList
                        {
                            Attachment_Pk = attachment.Attachment_Pk,
                            Attachment_File_Path = attachment
                                .Attachment_File_Path.Split(new[] {'$'})[1]
                        }).ToList();

        return attachmentNames;
    }
    catch (Exception ex)
    {
        ExceptionHandler.ExceptionLog(ex);
        return null;
    }
} 

Как вы можете видеть, что я пытаюсь разделить Attachmentfilepath который содержит '$' и назначает второе значение ([1]) для Attachment_FilePath

Может кто-нибудь подсказать, как я могу разделить и присвоить значение строке AttachmentList в том же запросе Спасибо

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

Вы можете сначала проецировать в анонимный класс, чтобы получить нужные данные, а затем переключиться на использование Linq для объектов, где поддерживается этот тип операции, используя AsEnumerable():

var attachmentNames = (from attachment in tent.Attachments
                        where (attachment.Attachment_Type == type && attachment.Attachment_Reference_Pk == ReferenceId)
                        select new { attachment.Attachment_Pk, attachment.Attachment_File_Path })
                        .AsEnumerable()
                        .Select(attachment =>
                        new AttachmentList
                        {
                            Attachment_Pk = attachment.Attachment_Pk,
                            Attachment_File_Path = attachment.Attachment_File_Path.Split(new[] { '$' })[1]
                        }).ToList();
2 голосов
/ 13 февраля 2012

Если честно, самый простой подход - это разделение на стороне клиента, если вам действительно не нужно, чтобы он был полноценной сущностью. Например:

var query = from attachment in tent.Attachments
            where attachment.Attachment_Type == type &&
                  attachment.Attachment_Reference_Pk == ReferenceId
            select new { Attachment_Pk, Attachment_File_Path };

// Force the rest to execute client-side.
var attachmentNames = query.AsEnumerable()
                           .Select(x => new AttachmentList {
                               Attachment_Pk = x.Attachment_Pk,
                               Attachment_File_Path = x.Attachment_File_Path
                                                       .Split('$')[1]
                           })
                           .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...