2013-03-14 38 views
6

mục này được lái xe cho tôi điên ;-) tôi đang cố gắng để làm một truy vấn đơn giản khi tham gia hai bảngMVC 4. và Entity Framework Bảng Tham

tôi có như sau:

phương pháp Repository Lớp

public IQueryable<ADPerson> FindAll(string UserId) 
    { 
     return (from p in db.ADPerson 
       select p); 


    } 

Trong điều khiển của tôi:

var ADPersonList = from o in ADPersonDB.FindAll(GetUserId()) 
        join c in MSDNTypeDB.FindAll(GetUserId()) on o.MsdnTypeId equals c.MsdnTypeId 
        select new ADPerson() 
        { 

         AdPersonId = o.AdPersonId, 
         SamAccountName = o.SamAccountName, 
         Description = o.Description, 
         DisplayName = o.DisplayName, 
         UserPrincipalName = o.UserPrincipalName, 
         Enabled = o.Enabled, 
         LastUpdated = o.LastUpdated, 
         OnlineAssetTag = o.OnlineAssetTag, 
         MsdnTypeId = o.MsdnTypeId, 
         MsdnSubscription = c.MsdnTypeDescription, 


        }; 

tôi tiếp tục nhận được một e rror:

{"The specified LINQ expression contains references to queries that are associated with different contexts."} 

Tôi cũng đã cố gắng thêm vào lớp kho:

phương pháp Repository Lớp

public IQueryable<ADPerson> FindAll(string UserId) 
    { 
     //return (from p in db.ADPerson 
     //  select p); 

     var query = from o in db.ADPerson 
        join c in db.MsdnTypes on o.MsdnTypeId equals c.MsdnTypeId 
        select new ADPerson() 
        { 

         AdPersonId = o.AdPersonId, 
         SamAccountName = o.SamAccountName, 
         Description = o.Description, 
         DisplayName = o.DisplayName, 
         UserPrincipalName = o.UserPrincipalName, 
         Enabled = o.Enabled, 
         LastUpdated = o.LastUpdated, 
         OnlineAssetTag = o.OnlineAssetTag, 
         MsdnTypeId = o.MsdnTypeId, 

         MsdnSubscription = c.MsdnTypeDescription, 


        }; 

     return query; 

    } 

là nó thực sự rất khó có thể làm một cách đơn giản kết hợp giữa hai bảng và cư biến trong Khuôn khổ thực thể

Cảm ơn

+0

Đó có phải là lỗi tương tự bằng cách sử dụng phương pháp thứ hai? – mattytommo

+0

Điểm tuyệt vời: Không có lỗi được trả về vào lần thứ hai là: Thực thể hoặc kiểu phức 'project.Models.ADPerson' không thể được xây dựng trong truy vấn LINQ to Entities. –

+0

RE: lỗi thứ hai. Đó là bởi vì bạn không thể * project * vào một thực thể được ánh xạ. Bạn có thể chiếu truy vấn tới một đối tượng ẩn danh và sau đó ánh xạ nó tới thực thể ADPerson sau đó –

Trả lời

6

dự án đến một đối tượng ẩn danh

var query = from o in db.ADPerson 
    join c in db.MsdnTypes on o.MsdnTypeId equals c.MsdnTypeId 
    select new 
    { 
    AdPersonId  = o.AdPersonId, 
    SamAccountName = o.SamAccountName, 
    Description  = o.Description, 
    DisplayName  = o.DisplayName, 
    UserPrincipalName = o.UserPrincipalName, 
    Enabled   = o.Enabled, 
    LastUpdated  = o.LastUpdated, 
    OnlineAssetTag = o.OnlineAssetTag, 
    MsdnTypeId  = o.MsdnTypeId, 
    MsdnSubscription = c.MsdnTypeDescription, 
    }; 

Sau đó, bản đồ về tổ chức của bạn

foreach (var item in query) 
{ 
    var adPerson = new ADPerson 
    { 
    AdPersonId   = item.AdPersonId, 
    SamAccountName  = item.SamAccountName, 
    Description  = item.Description, 
    DisplayName  = item.DisplayName, 
    UserPrincipalName = item.UserPrincipalName, 
    Enabled   = item.Enabled, 
    LastUpdated  = item.LastUpdated, 
    OnlineAssetTag  = item.OnlineAssetTag, 
    MsdnTypeId   = item.MsdnTypeId, 
    MsdnSubscription = item.MsdnTypeDescription, 
    { 
} 
+0

Truy vấn var đầu tiên bị lỗi là có giả sử để chọn mới không? –

+0

@DavidCostelloe vâng, xin lỗi. Câu trả lời đã chỉnh sửa –

+0

gặp lỗi "Tên cột không hợp lệ 'MsdnSubscription" trên màn hình của trường –

2
public IQueryable<ADPerson> FindAll(string UserId) 
    { 
     // return (from p in db.ADPerson 
     //  select p); 
     List<ADPerson> lst = new List<ADPerson>(); 
     var query = from o in db.ADPerson 
        join c in db.MsdnTypes on o.MsdnTypeId equals c.MsdnTypeId 
        select new 
         { 

          AdPersonId = o.AdPersonId, 
          SamAccountName = o.SamAccountName, 
          Description = o.Description, 
          DisplayName = o.DisplayName, 
          UserPrincipalName = o.UserPrincipalName, 
          Enabled = o.Enabled, 
          LastUpdated = o.LastUpdated, 
          OnlineAssetTag = o.OnlineAssetTag, 
          MsdnTypeId = o.MsdnTypeId, 
          MsdnSubscription = c.MsdnTypeDescription 

         }; 
     foreach (var item in query) 
     { 
      var adPerson = new ADPerson() 
       { 
        AdPersonId = item.AdPersonId, 
        SamAccountName = item.SamAccountName, 
        Description = item.Description, 
        DisplayName = item.DisplayName, 
        UserPrincipalName = item.UserPrincipalName, 
        Enabled = item.Enabled, 
        LastUpdated = item.LastUpdated, 
        OnlineAssetTag = item.OnlineAssetTag, 
        MsdnTypeId = item.MsdnTypeId, 
        MsdnSubscription = item.MsdnSubscription 
       }; 
      lst.Add(adPerson); 

     } 

     return lst.AsQueryable(); 



    } 
+0

có thể bạn có dấu phẩy ở "MsdnSubscription = c.MsdnTypeDescription" và cũng trên thứ hai – eburgos

+0

Cảm ơn thấy đó là cú đúp {và}; gần như có :-) –

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