.net 林克,无法加入字符串

.net 林克,无法加入字符串,.net,linq,c#-4.0,join,.net,Linq,C# 4.0,Join,我有一个用户列表,每个用户都有一个问题列表。在我的模型中,问题列表应该是通过逗号的字符串。我尝试: public List<ITW2012Mobile.ViewModels.AdminSurveyReportModel> SurveyReportList() { var q = from i in _dbContext.Users where i.UserId != null select new ITW2012Mobile.V

我有一个用户列表,每个用户都有一个问题列表。在我的模型中,问题列表应该是通过逗号的字符串。我尝试:

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实体无法识别方法“System.String” JoinSystem.String,System.String[]”方法,此方法不能 被翻译成商店表达式

如何正确获取它?

我建议使用字符串。本地连接操作,而不是使用可计算的:

尝试使用这种方法


尚未测试

无法包含字符串。请加入初始投影,因为LINQ转换器不支持它。我可以为它编写一个自定义转换器吗?

不加入linq,只需返回集合并在检索后加入即可。否,它不起作用:linq to Entities无法识别方法“System.String Aggregate[String]System.Collections.Generic.IEnumerable1[System.String],System.Func3[System.String,System.String,System.String]'方法,而此方法无法转换为存储表达式。问题4的类型为String,您的select语句的类型为IQuerable…@John:这很好-因为在q中,我只为匿名类型T创建IQueryable。在第二部分中,我只将其转换为AdminSurveyReportModel。我会重新命名这个财产,让它更清楚。哦,丢失了。非常感谢你!在调用.ToList之前,我需要为Question4Parts添加额外的过滤器,所以我想知道这个查询的性能。它是否只在点击时获取数据?ToList?或者它会在点击后立即查询。AsEnumerable?@Hp93:它不会获取数据,直到请求哪个ToList将执行此操作-但是如果在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();
Question4 = (from a in _dbContext.MultipleQuestions where a.MultipleQuestionType.KEY == MultipleQuestionKeys.BENEFITS select a.Question).ToArray().Aggregate((x,y) => x + "," + y)