簡體   English   中英

所有表的C#/ LINQ自動過濾

[英]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=10Name=SmithAddress=11 Golden St.

所有這些都很簡單,但是數據庫有20多個表,因此僅做一項家庭作業就需要很多工作。 我想知道,是否有一種方法可以自動執行此過程,所以我不必編寫單獨的代碼來篩選每個表並返回結果。

我已經想到,我可以使用myDataContext.GetType().GetProperties()並對其進行遍歷,將property.Name添加到我的DropdownList項目中以創建我的表列表。 問題是去做剩下的。 映射的表(例如, Customers )沒有任何有用的屬性( CustomersSystem.Data.Linq.Table<Customer>類型,而必需的屬性在Customer類中)。 我不知道如何從中提取引用的類Linq.Table<>例如: CustomerLinq.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM