[英]C#/LINQ Automated filtering on all tables
我正在使用C#和LINQ to SQL。
對於我的家庭作業,我必須創建一個應用程序,該應用程序將允許用戶按某些列過濾數據庫中的任何表。 我的想法是,我將DropdownList與表列表,3個TextBoxes +標簽,DataGridView和Button一起使用。 當用戶選擇表時,標簽文本更改為與所選表中的前三列匹配,然后當用戶按下按鈕時,程序執行查詢,該查詢將按textBoxes中的值過濾行。
例如,如果用戶選擇表“ Customers”,則分配給textBoxes的標簽將更改為“ CustomerID”,“ Name”,“ Address”。 如果用戶輸入文本框“ 10”,“ Smith”,“ 11 Golden St.” 並按按鈕,DataGridView將僅顯示ID=10
或Name=Smith
或Address=11 Golden St.
所有這些都很簡單,但是數據庫有20多個表,因此僅做一項家庭作業就需要很多工作。 我想知道,是否有一種方法可以自動執行此過程,所以我不必編寫單獨的代碼來篩選每個表並返回結果。
我已經想到,我可以使用myDataContext.GetType().GetProperties()
並對其進行遍歷,將property.Name
添加到我的DropdownList項目中以創建我的表列表。 問題是去做剩下的。 映射的表(例如, Customers
)沒有任何有用的屬性( Customers
是System.Data.Linq.Table<Customer>
類型,而必需的屬性在Customer
類中)。 我不知道如何從中提取引用的類Linq.Table<>
例如: Customer
從Linq.Table<Customer>
),甚至,如果有可能不知道明確的表名(只使用建立查詢GetType().GetProperties()
和類似的內容。
我的目標是做(或找出是否不可能做)這樣的事情:
myDropdown_SelectedIndexChanged()
{
string tableName = myDropdown.SelectedItem.ToString();
<some universal type> table = dataContext.GetType.GetProperty(tableName)
.SomeFunctionIDontKnowAbout(); //something to get class "Customer" if selected table was "Customers"
label1.Text = table.GetType().GetProperties()[0].Name; // set first column name as label's text
}
然后在按鈕上單擊:
string tableName = myDropdown.SelectedItem.ToString();
var query = dataContext.GetProperty(tableName)
.Select(table => table.GetProperties()[0] == textBox1.Text);
//select from dynamically chosen table where value in first column matches text in textBox1
這有可能嗎? 我希望我的老師不要給我們這個作業,所以我們會一次又一次地為20個不同的表編寫相同的代碼...
您可以使用Type.GetGenericArguments()獲得對象的通用類型,如下所示:
Type tableType = linqTable.GetGenericArguments()[0];
label1.Text = tableType.GetProperties()[0].Name;
您可能可以通過構建表達式樹來創建動態LINQ查詢,但是我不確定您將如何執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.