2012-03-10 36 views
6

Tôi có một danh sách người dùng, mỗi người dùng có danh sách các câu hỏi. Trong danh sách các câu hỏi mô hình của tôi nên có chuỗi thông qua dấu phẩy. Tôi cố gắng:LINQ, không thể tham gia vào chuỗi

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; } 
} 

tất nhiên, tôi nhận được lỗi:

LINQ to Entities does not recognize the method 'System.String Join(System.String, System.String[])' method, and this method cannot be translated into a store expression.

Làm thế nào để có được nó một cách chính xác?

+2

thay vì tham gia trong 'linq', chỉ cần trả lại bộ sưu tập và làm việc gia nhập sau khi hồi –

Trả lời

14

tôi sẽ đề nghị làm các hoạt động string.Join địa phương thay vì sử dụng 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

Question4 có kiểu String, sentense của bạn với chọn đã gõ IQuerable ... – John

+1

@ John: Đó là tốt - bởi vì trong' q' Tôi chỉ đang tạo một 'IQueryable ' cho một loại nặc danh 'T'. Tôi chỉ chuyển đổi nó thành một 'AdminSurveyReportModel' trong phần thứ hai. Tôi sẽ đổi tên thuộc tính để làm cho điều này rõ ràng hơn. –

+0

oh, mất nó. Cảm ơn nhiều! – John

-3

Hãy thử sử dụng các phương pháp Aggregate.

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

đã không được kiểm tra

+0

không, nó không hoạt động: LINQ to Entities không nhận ra phương thức 'System.String Aggregate [String] (System.Collections.Generic.IEnumerable'1 [System.String], System.Func'3 [System.String, Phương thức System.String, System.String]) và phương thức này không thể được dịch sang biểu thức cửa hàng. – John

0

không thể bao gồm các string.Join() trong dự báo ban đầu, vì người dịch LINQ không hỗ trợ nó. Tôi có thể viết một dịch giả tùy chỉnh cho nó?

Các vấn đề liên quan