2015-01-14 2 views
0

Как бы показать значение псевдонима Linq to SQL в представлении MVC 5 RAZOR. Это код, который у меня в контроллере:LINQ To SQL Псевдоним, показанный в Razor View

var Query = (from c in db.Contractors 
       join cmb in db.ContractorManagedBies on c.ManagedBy equals cmb.ManagedBy 
       join dc in db.DCLocMappings on c.LocationID equals dc.LocationID 
       join at in db.AccountTitles on c.AccountTitleID equals at.AccountTitleID 
       let Fullname = cmb.ManagerFirstName + ' ' + cmb.ManagerLastName 
       where dc.DeliveryCenter == location 
       select new { cmb.ManagedBy, Fullname}).ToList(); 

Когда я иду в RAZOR View, я понятия не имею, как получить значение FULLNAME. Любая помощь будет оценена по достоинству.

+3

Создайте ViewModel с этими полями ... так что ваш вид строго типизирован ... Таким образом, ваш вид имеет список @model List ... самый чистый способ. В запросе вы выбираете новый YourViewModel {xxxx} – Romias

+0

. Я смог дойти до модели представления и изменить выбор без ошибок, но объект Fullname не появляется. Я не уверен, в чем проблема. Любая дополнительная помощь будет оценена по достоинству. – Jason

+0

Чтобы прояснить вышеизложенное, вам нужно определить объект в вашей модели, который содержит результаты вашего выбора, и вместо выбора анонимного объекта в вашем запросе выберите результаты в свой пользовательский объект. – esmoore68

ответ

0

Что-то вроде этого

Модель

public class Contractor() 
{ 
    public string FullName {get;set;} 
    public string ManagedBy {get;set;} 
} 

вид Модель Класс

public class ContractorViewModel() 
{ 
    public List<Contractor> Contractors {get;set;} 
} 

Контроллер

public ActionResult Contractors() 
{ 
    var viewModel = new ContractorViewModel(); 
    var query = (from c in db.Contractors 
       join cmb in db.ContractorManagedBies on c.ManagedBy equals cmb.ManagedBy 
       join dc in db.DCLocMappings on c.LocationID equals dc.LocationID 
       join at in db.AccountTitles on c.AccountTitleID equals at.AccountTitleID 
       where dc.DeliveryCenter == location 
       select new { cmb.ManagedBy, cmb.ManagerFirstName, cmb.ManagerLastName}).ToList().Select(x => new Contractor { 
       FullName = x.ManagerFirstName + ' ' + x.ManagerLastName, 
       ManagedBy = x.ManagedBy 
       }).ToList(); 

    viewModel.Contractors = query; 

    return View(viewModel); 
} 

Посмотреть

@foreach(var contractor in Model.Contractors) 
{ 
    <p>@contractor.FullName</p> 
    <p>@contractor.ManagedBy</p> 
} 
+0

Спасибо, почти там, но объект FullName до сих пор не распознан. Сообщение об ошибке показывает, что оно также ищет FullName в наборе данных Подрядчика, когда на самом деле это функция другого набора данных, основанного на условии соединения. Название другого набора данных - ContractorManagedBy. То, что я пытаюсь сделать, это принять соединение, возвращающее значение int для строки, и выполнить другой запрос linq, чтобы найти значение в объединении, а затем объединить первое и последнее имя этой таблицы на основе этого дополнительного соединения и показать его как часть исходного запроса – Jason

+0

Итак, при размещении точки разрыва по запросу и перечислении списка вы ничего не видите или FullName null? – Mike

+0

Ну, сообщение, которое я получаю, ... не содержит определения для «FullName», поэтому оно даже не компилируется. – Jason