2016-01-06 5 views
1

Я новичок в MVC. В моем приложении я пытаюсь выполнить поиск данных на основе разных параметров. Данные хранятся в базе данных, и я использую Entity Framework для доступа к db. Поскольку мне нужно отображать данные из нескольких моделей в один вид, я решил использовать ViewModel, чтобы связать оба класса вместе и показать данные. Вот мой код МоделиC#: MVC Viewmodel для доступа к данным из нескольких таблиц

[Table("User")] 
public partial class User 
{ 
    [Key] 
    public int UserId { get; set; } 

    [StringLength(50)] 
    public string FirstName { get; set; } 

    [StringLength(50)] 
    public string LastName { get; set; } 

    [StringLength(50)] 
    public string Email { get; set; } 

    public virtual LicenseTypeMaster LicenseTypeMaster { get; set; } 
} 

[Table("tblLicenseTypeMaster")] 
public partial class LicenseTypeMaster 
{ 
    Key] 
    public int LicenseTypeId { get; set; } 

    [StringLength(100)] 
    public string LicenseTypes { get; set; } 

    public int? LicenseCount { get; set; } 
} 

ViewModel

public class UserLicenseTWRBinder 
{ 
    VSLicenseDb db = new VSLicenseDb(); 


    public IEnumerable<User> GetUserDetail(string searchBy, string searchValue) 
    { 
     List<User> usr = new List<User>(); 
     public List<User> usr { get; set; }; 
     var query = (from u in db.Users 
        join ut in db.UserLicenseTypes 
         on u.UserId equals ut.UserId 
        join tl in db.ToolsLicenseTypes 
        on ut.ToolLicenseTypeId equals tl.ToolLicenseTypeId 
        join tm in db.LicenseTypeMasters 
        on tl.LicenseTypeId equals tm.LicenseTypeId 
        where u.FirstName == searchBy 
        select new 
        { 
         FirstName = u.FirstName, 
         LastName = u.LastName, 
         Email = u.Email, 
         LicenseAllocated. = tm.LicenseTypes 
        }).ToList(); 
     return query; 
    } 
    } 

Я хочу способ вернуть ПгвЬЫате, LastName & Электронная почта от модели пользователя и от модели Тип лицензии LicenseTypeMaster. Я не уверен, какие свойства должны быть включены из обеих моделей в ViewModel, чтобы он мог отображать только нужные данные. Также возвращаемый тип метода, чтобы его можно было получить в контроллере, а затем можно передать в представление.

Пожалуйста, помогите.

+0

Я думаю, вы должны удалить свою логику из своей модели просмотра и поместить свой GetUserDetail в другой класс (бизнес-уровень). другой совет - когда вы помещаете List в свою модель. Вы привязываете свой слой данных к View, и это плохо. –

+0

@pooriataghizadeh Должен ли я положить его в контроллер? Я думал о том, чтобы называть его контроллером, создавая класс модели представления. – arpymastro

+0

вы можете поместить свои функции в нужное вам место, и вы можете называть его instantiatin, но лучше всего вы поместите свою логику в другой слой. и отделять логику от вашей модели данных и представления (уровень представления). http://programmers.stackexchange.com/questions/246660/entirely-separate-business-logic-layer-from-mvc –

ответ

0

Вам нужно создать новый класс Say UserPoco с всеми полями для извлечения

public class UserPoco 
{ 
    public string FirstName {get;set} 
    public string LastName {get;set} 
    public string Email{get;set} 
    public string LicenseAllocated {get;set} 
} 

И метод должен выглядеть следующим образом

public IEnumerable<UserPoco> GetUserDetail(string searchBy, string searchValue) 
{ 
    List<User> usr = new List<User>(); 
    public List<User> usr { get; set; }; 
    var query = (from u in db.Users 
       join ut in db.UserLicenseTypes 
        on u.UserId equals ut.UserId 
       join tl in db.ToolsLicenseTypes 
       on ut.ToolLicenseTypeId equals tl.ToolLicenseTypeId 
       join tm in db.LicenseTypeMasters 
       on tl.LicenseTypeId equals tm.LicenseTypeId 
       where u.FirstName == searchBy 
       select new UserPoco 
       { 
        FirstName = u.FirstName, 
        LastName = u.LastName, 
        Email = u.Email, 
        LicenseAllocated. = tm.LicenseTypes 
       }).ToList(); 
    return query; 
} 

Это, как я буду делать. Вы можете добавить столько полей, сколько хотите для класса poco. Надеюсь, что помогает.

+0

Спасибо за решение. Работала хорошо для меня. – arpymastro

+0

Я рад, что это сработало – Parminder

Смежные вопросы