LINQ to SQL如何通过字段名称获取值

时间:2009-06-17 15:24:32

标签: asp.net-mvc linq-to-sql

我使用Linq to SQL作为ASP.NET MVC应用程序中的数据访问层。因此查询结果是一个强类型对象。如何动态指定要在页面中显示的字段。

例如,查询结果包含以下字段: 名字 姓 地址 电话

我的问题是,如果一个用户想要显示姓氏和名字。第二个用户想要显示地址和名字,第三个等...不同的用户有不同的要求。那么如何根据用户的具体要求(按需)查询数据库/过滤结果?


更具体地说,查询结果是一组人员信息。

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

3 个答案:

答案 0 :(得分:1)

1)用户在UI中指示用户希望看到的结果 2)Controller对此进行解释并将其存储以供以后使用 3)Controller进入DAL并从DAL获取数据 4)然后,Controller根据#2
以某种方式修改返回结果 5)然后,Controller将修改后的数据传递给UI
6)UI呈现数据

我认为您的断开连接从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 :(得分:1)

答案 2 :(得分:0)

根据用户输入使用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
}