LINQ, не может присоединиться к строке - PullRequest
6 голосов
/ 10 марта 2012

У меня есть список пользователей, у каждого пользователя есть список вопросов. В моей модели список вопросов должен быть в строке через запятую. Я стараюсь:

public List<ITW2012Mobile.ViewModels.AdminSurveyReportModel> SurveyReportList()
{
    var q = from i in _dbContext.Users
            where i.UserId != null
            select new ITW2012Mobile.ViewModels.AdminSurveyReportModel()
            {
                FirstName = i.FirstName,
                LastName = i.LastName,
                Question4 = String.Join(", " , (from a in _dbContext.MultipleQuestions where a.MultipleQuestionType.KEY == MultipleQuestionKeys.BENEFITS select a.Question).ToArray())
            };
    return q.ToList();
}

public class AdminSurveyReportModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Question4 { get; set; }
}

конечно, я получаю ошибку:

LINQ to Entities не распознает метод 'System.String Метод Join (System.String, System.String []) ', и этот метод не может перевести в магазинное выражение.

Как правильно его получить?

Ответы [ 3 ]

15 голосов
/ 10 марта 2012

Я бы предложил выполнить операцию string.Join локально, вместо этого используя AsEnumerable:

var q = from i in _dbContext.Users
        where i.UserId != null
        select new
        {
            FirstName = i.FirstName,
            LastName = i.LastName,
            Question4Parts = _dbContext.MultipleQuestions
                                       .Where(a => a.MultipleQuestionType.KEY == 
                                                   MultipleQuestionKeys.BENEFITS)
                                       .Select(a => a.Question)
        };

return q.AsEnumerable()
        .Select(x => new ITW2012Mobile.ViewModels.AdminSurveyReportModel
                     {
                         FirstName = x.FirstName,
                         LastName = x.LastName,
                         Question4 = string.Join(", ", x.Question4Parts)
                     })
        .ToList();
0 голосов
/ 13 марта 2012

не может включать string.Join () в начальную проекцию, потому что переводчик LINQ не поддерживает ее. Могу ли я написать собственный переводчик для него?

0 голосов
/ 10 марта 2012

Попробуйте использовать метод Aggregate .

Question4 = (from a in _dbContext.MultipleQuestions where a.MultipleQuestionType.KEY == MultipleQuestionKeys.BENEFITS select a.Question).ToArray().Aggregate((x,y) => x + "," + y)

Не тестировали

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...