2009-06-17 121 views
0

我使用Linq to SQL作爲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;} 
} 
+0

你需要給我的,你要完成什麼更好的解釋。 「根據用戶的不同要求得到結果」是什麼意思? – 2009-06-17 15:34:52

回答

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 
} 
+1

感謝您的解決方案。這似乎有點笨拙,如果有很多領域和許多不同的組合? – Smallville 2009-06-17 15:44:20

1

1)用戶表示什麼樣的結果,用戶希望看到
2)控制器將此用戶界面並將其存儲起來以備後用
3)控制器進入DAL並從DAL獲取數據4)然後控制器按照#2
以某種方式修改返回結果5)然後控制器將修改的數據傳遞給UI
6)UI呈現數據

我認爲你的斷開連接從4開始,可能會擴展到6個。

事實上,有成千上萬的方法來做到這一點。這裏有一種方法可以用驚人的C#類僞代碼來實現。

首先,我會創建一個視圖模型,其中包含有關我想要顯示給用戶的信息。

原始LINQ到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;} 
} 

是PREPS模型的控制方法:

[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/> 
    <% } %> 
<% } %> 
+0

嗨,請問,謝謝你的回答。但這不是我要找的。我的問題是,如果一個用戶想顯示姓和名。第二位用戶想要顯示地址和名字,第三位等......不同的用戶有不同的要求。那麼,如何根據用戶的具體要求(按需)查詢數據庫/篩選結果? – Smallville 2009-06-22 07:13:52

+0

我的答案是獲取所有數據,然後將其與用戶的偏好合並並適當顯示。我想你正在尋找比管道更進一步的過濾。 – Will 2009-06-22 11:44:22

相關問題