【问题标题】:LINQ to SQL how to get value by field nameLINQ to SQL 如何通过字段名获取值
【发布时间】:2009-06-17 15:24:31
【问题描述】:

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

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

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


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

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

【问题讨论】:

  • 您需要更好地解释您要完成的工作。 “根据用户的不同要求获得结果”是什么意思?

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


【解决方案1】:
【解决方案2】:

1) 用户在 UI 中指出用户希望看到的结果
2) 控制器对此进行解释并将其存储以备后用
3)Controller去DAL,从DAL获取数据
4)Controller然后根据#2修改返回结果
5) 控制器然后将修改后的数据传递给 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/>
  <% } %>
<% } %>

【讨论】:

  • 嗨,威尔,谢谢你的回答。但这不是我要找的。我的问题是如果一个用户想要显示姓氏和名字。第二个用户想显示地址和名字,第三个等......不同的用户有不同的要求。那么如何根据用户的特定要求(按需)查询数据库/过滤结果?
  • 我的答案是获取所有数据,然后将其与用户的偏好合并并适当显示。我猜你正在寻找比这更进一步的过滤。
【解决方案3】:

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

【讨论】:

  • 感谢您的解决方案。但这似乎有点笨拙,如果有许多字段和许多不同的组合怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
相关资源
最近更新 更多