2013-12-23 66 views
0

我有兩個相關的模型。Linq to sql返回相關數據

public class RolesModels 
{ 
    public RolesModels() 
    { 
     this.Users = new HashSet<UserModels>(); 
    } 

    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int RoleId { get; set; } 

    [Required] 
    [DataType(DataType.Text)] 
    [StringLength(20, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)] 
    [Display(Name = "Caption")] 
    public string Caption { get; set; } 

    [Display(Name = "Can Create")] 
    public bool createRole { get; set; } 

    [Display(Name = "Can View")] 
    public bool viewRole { get; set; } 


    [Display(Name = "Can Modify")] 
    public bool modifyRole { get; set; } 

    [Display(Name = "Can Delete")] 
    public bool deleteRole { get; set; } 

    public virtual ICollection<UserModels> Users { get; set; } 

} 

,第二個是這樣

public class UserModels 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 

    public int user_id { get; set; } 

    [Required] 
    [DataType(DataType.Text)] 
    [Display(Name = "User Name")] 
    [StringLength(20, ErrorMessage = "The {0} must be at least 3 characters long.", MinimumLength = 3)] 
    public string user_name { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    [StringLength(10, ErrorMessage = "The {0} must be at least 4 characters long.", MinimumLength = 4)] 
    public string user_pass { get; set; } 

    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email")] 
    [StringLength(50, ErrorMessage = "The {0} must be at least 6 characters long.", MinimumLength = 6)] 
    public string UserEmail { get; set; } 

    [Display(Name = "Registeration Date")] 
    [DataType(DataType.Date)] 
    [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime RegDate { get; set; } 

    [Display(Name = "Enable User")] 
    public bool status { get; set; } 

    //[Bindable(false)] 
    public int RoleId { get; set; } 

    [Display(Name = "User Roles")] 
    public virtual RolesModels Roles { get; set; } 

} 

的事情是,我希望能夠與下面的列檢索記錄:

User Name | Email | Registration Date | Enable User | Role Caption 

,這裏是我的LINQ to SQL代碼:

var model = from c in db.UserModels 
       join o in db.RolesModels on c.RoleId equals o.RoleId 
       where 1==1 
       select c; 

回答

0

我用Consoto大學的示例項目弄明白了。 下面是解:

var m = db.UserModels.Include(u => u.Roles); 
return View(m.ToList()); 

和modelItem => item.Roles.Caption抓取從使用的導航屬性的角色模型的作用字幕。

感謝所有的嘗試。

0

你意思是這樣的

var model = from c in db.UserModels 
       join o in db.RolesModels on c.RoleId equals o.RoleId 
       where 1==1 
       select new { c.user_name, c.UserEmail, c.RegDate, o.Caption, c.status}).ToList(); 
+0

我使用上面的錯誤。基於字典類型的錯誤。我在我看來使用IEnumerable。我該如何糾正? – Peter

+0

不要做列表 –

+0

沒有ToList它會產生字符串錯誤。說的是字符串,而不是模型。 – Peter

1

你不需要where 1=1部分,因爲它給你總是真實的,並不影響結果集。你也已經有角色的導航屬性,所以您不必手動加入實體:

from u in db.UserModels 
select new { 
    UserName = user_name, 
    Email = UserEmail, 
    RegistrationDate = RegDate, 
    EnableUser = status, 
    RoleCaption = u.Roles.Caption 
} 

考慮也做零檢查,如果有可能的用戶不能有角色分配。

+0

難道你錯過了一個比較? – Silvermind

+0

@Silvermind不,我不認爲比較是有意義的這個查詢 –

+1

編輯:對不起,你沒有完成你的答案,我沒有正確閱讀它;) – Silvermind

0
var model = (from c in db.UserModels.AsEnumerable() 
       join o in db.RolesModels.AsEnumerable() on c.RoleId equals o.RoleId 
       select new { c.user_name, c.UserEmail, c.RegDate, o.Caption, c.status}).ToList(); 

做這樣的事情。