Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/LINQ自动筛选所有表_C#_Linq - Fatal编程技术网

C#/LINQ自动筛选所有表

C#/LINQ自动筛选所有表,c#,linq,C#,Linq,我正在使用C#和LINQ来编写SQL 对于我的家庭作业,我必须创建一个应用程序,它允许用户按某些列过滤数据库中的任何表。我的想法是使用一个下拉列表,其中包含表格列表、3个文本框+标签、DataGridView和按钮。当用户选择表格时,标签文本更改为匹配所选表格中的前3列,然后当用户按下按钮时,程序执行查询,该查询将按文本框中的值筛选行 例如,如果用户选择表“Customers”,则分配给文本框的标签将更改为“CustomerID”、“Name”、“Address”。如果用户进入文本框“10”、“

我正在使用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多个表,所以仅仅做一个家庭作业就要做很多工作。我想知道,是否有一种方法可以自动化这个过程,所以我不必编写单独的代码来过滤每个表并返回结果

我已经想到,我可以使用
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;