Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc LINQ到SQL如何通过字段名获取值_Asp.net Mvc_Linq To Sql - Fatal编程技术网

Asp.net mvc LINQ到SQL如何通过字段名获取值

Asp.net mvc LINQ到SQL如何通过字段名获取值,asp.net-mvc,linq-to-sql,Asp.net Mvc,Linq To Sql,我在ASP.NETMVC应用程序中使用LINQtoSQL作为数据访问层。因此,查询结果是强类型对象。如何动态指定要在页面中显示的字段 例如,查询结果包含以下字段: 名字 姓氏 地址 电话 我的问题是,如果一个用户想要显示Lastname和Firstname。第二个用户想要显示地址和名字,第三个等等。。。不同的用户有不同的要求。那么,如何根据用户的特定需求(按需)查询数据库/过滤结果呢 更具体地说,查询结果是一组人员信息 public class Person { public string

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

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

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


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

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

根据用户输入使用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
}
1) 用户在UI中指示用户希望看到的结果
2) 控制器对此进行解释并将其存储以备将来使用
3) 控制器转到DAL并从DAL获取数据
4) 然后,控制器根据#2
5) 然后,控制器将修改后的数据传递给UI
6) UI呈现数据

我想你的断开从4点开始,可能会延伸到6点

事实上,有成千上万的方法可以做到这一点。这里有一种方法可以在类似C的伪代码中实现

首先,我将创建一个视图模型,其中包含有关我要向用户显示的内容的信息

原始Linq到Sql(缩写):

我的视图模型:

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;}
}
以下是观点:

<% 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/>
  <% } %>
<% } %>





查看System.Linq.Dynamic:


你需要给我一个更好的解释,说明你想要实现的目标。您所说的“根据用户的不同需求获取结果”是什么意思?感谢您提供的解决方案。但这似乎有点笨拙,如果有许多字段和许多不同的组合呢?嗨,威尔,谢谢你的回答。但这不是我要找的。我的问题是,如果一个用户想要显示lastname和firstname。第二个用户想要显示地址和名字,第三个等。。。不同的用户有不同的要求。那么,我如何根据用户的特定需求(按需)查询数据库/过滤结果呢?我的答案是获取所有数据,然后将其与用户的首选项合并并适当显示。我猜你是在寻找更深层的过滤。
[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/>
  <% } %>
<% } %>