我使用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;}
}
答案 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)
看看System.Linq.Dynamic:
答案 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
}