C#/LINQ自动筛选所有表
我正在使用C#和LINQ来编写SQL 对于我的家庭作业,我必须创建一个应用程序,它允许用户按某些列过滤数据库中的任何表。我的想法是使用一个下拉列表,其中包含表格列表、3个文本框+标签、DataGridView和按钮。当用户选择表格时,标签文本更改为匹配所选表格中的前3列,然后当用户按下按钮时,程序执行查询,该查询将按文本框中的值筛选行 例如,如果用户选择表“Customers”,则分配给文本框的标签将更改为“CustomerID”、“Name”、“Address”。如果用户进入文本框“10”、“Smith”、“11 Golden St.”并按下按钮,DataGridView将仅显示ID=10或Name=Smith或Address=11 Golden St. 所有这些都很简单,但数据库有20多个表,所以仅仅做一个家庭作业就要做很多工作。我想知道,是否有一种方法可以自动化这个过程,所以我不必编写单独的代码来过滤每个表并返回结果 我已经想到,我可以使用C#/LINQ自动筛选所有表,c#,linq,C#,Linq,我正在使用C#和LINQ来编写SQL 对于我的家庭作业,我必须创建一个应用程序,它允许用户按某些列过滤数据库中的任何表。我的想法是使用一个下拉列表,其中包含表格列表、3个文本框+标签、DataGridView和按钮。当用户选择表格时,标签文本更改为匹配所选表格中的前3列,然后当用户按下按钮时,程序执行查询,该查询将按文本框中的值筛选行 例如,如果用户选择表“Customers”,则分配给文本框的标签将更改为“CustomerID”、“Name”、“Address”。如果用户进入文本框“10”、“
myDataContext.GetType().GetProperties()
并在其中迭代,将property.Name
添加到我的下拉列表项中,以创建我的表列表。问题是做剩下的事。映射表,例如Customers
,没有任何有用的属性(Customers
的类型为System.Data.Linq.table
,所需的属性在类Customer
中)。我不知道如何从Linq.Table
(例如Customer
从Linq.Table
)中提取引用的类,即使可以在不明确知道表名的情况下构建查询(仅使用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
}
这可能吗?我希望我的老师没有给我们这个作业,所以我们会一遍又一遍地为20个不同的表编写相同的代码…您可以通过如下方式获得对象的通用类型:
通过构建,您可能可以创建动态LINQ查询,但我不确定您将如何创建它。您可以通过如下方式获得对象的通用类型: 您可能可以通过构建一个动态LINQ查询来创建一个动态LINQ查询,但我不确定您将如何创建它
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
Type tableType = linqTable.GetGenericArguments()[0];
label1.Text = tableType.GetProperties()[0].Name;