LINQ to SQL как получить значение по имени поля - PullRequest
0 голосов
/ 17 июня 2009

Я использую Linq to SQL в качестве слоя доступа к данным в приложении ASP.NET MVC. Таким образом, результатом запроса является строго типизированный объект. Как я могу динамически указать, какое поле показывать на странице.

Например, результат запроса имеет следующие поля: Имя Фамилия Адрес Телефон

Мой вопрос: хочет ли один пользователь показать Фамилию и Имя. 2-й пользователь хочет показать адрес и имя, 3-й и т. Д. У разных пользователей разные требования. Итак, как я могу запросить базу данных / отфильтровать результат на основе конкретных требований пользователя (по требованию)?


Точнее говоря, результат запроса представляет собой набор информации о человеке.

public class Person
{
  public string FirstName {get;set;}
  public string LastName {get;set;}
  public string Tel {get;set;}
  public string Tel {get;set;}
}

Ответы [ 3 ]

1 голос
/ 17 июня 2009

1) Пользователь указывает в пользовательском интерфейсе, какие результаты пользователь хочет видеть
2) Контроллер интерпретирует это и сохраняет это для дальнейшего использования
3) Контроллер идет в DAL и получает данные из DAL
4) Затем контроллер каким-то образом изменяет возвращаемый результат в соответствии с # 2
5) Контроллер затем передает измененные данные в пользовательский интерфейс
6) Пользовательский интерфейс отображает данные

Я думаю, что ваше отключение начинается с 4 и может продолжаться до 6.

Дело в том, что существуют буквально тысячи способов сделать это. Вот один из способов сделать это в удивительно C # -подобном псевдокоде.

Во-первых, я бы создал модель представления, содержащую информацию о том, что я хочу отобразить пользователю.

Оригинал Linq to Sql (сокращенно):

public class Person
{
  public string FirstName {get;set;}
  public string LastName {get;set;}
  public string Tel {get;set;}
}

Моя модель просмотра:

public partial class PeopleView
{
  public bool ShowFirstName {get;set;}
  public bool ShowLastName {get;set;}
  public bool ShowTel {get;set;}
  public IEnumerable<Person> People {get;set;}
}

Метод контроллера, который подготавливает модель:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult PersonDetails(bool showFirstName, 
    bool showLastName, bool showTel)
{
  var viewData = new PeopleView()
    { 
      ShowFirstName = showFirstname, 
      ShowLastName = showLastName, 
      ShowTel = showTel, 
      People = Dal.GetPeople()
    };

  return View(viewData);
}

А вот и вид:

<% foreach(var item in ViewData.Model.People){ %>
  <% if(ViewData.Model.ShowFirstName) {%>
    <%= item.FirstName %><br/>
  <% } %>
  <% if(ViewData.Model.ShowLastName) {%>
    <%= item.LasttName %><br/>
  <% } %>
  <% if(ViewData.Model.ShowTel) {%>
    <%= item.Tel %><br/>
  <% } %>
<% } %>
1 голос
/ 22 июня 2009
0 голосов
/ 17 июня 2009

Используйте оператор if, основанный на вводе пользователем. Я предполагаю, что вы где-то сохранили предпочтения пользователя, и в этом случае следующий код поможет:

if (showAddress)
{
    var results = from u in Users
                  select new
                  {
                      FirstName = u.FirstName;
                      LastName = u.LastName;
                      Address= u.Address;
                  }
    // Code to display results goes here
}
else
{
    var results = from u in Users
                  select new
                  {
                      FirstName = u.FirstName;
                      LastName = u.LastName;
                  }
    // Code to display results goes here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...