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-100视图-相同列-通用查询_C#_Linq_Generics - Fatal编程技术网

C# LINQ-100视图-相同列-通用查询

C# LINQ-100视图-相同列-通用查询,c#,linq,generics,C#,Linq,Generics,以下是我的设想: 我们有一个遗留系统,它有大约100个视图,所有视图都会提取相同的数据列 现在,在我的DataContext中,我拥有上下文中的所有视图,并且每个视图都有一个单独的查询。每个查询的结果都加载到一个列表中,并返回给应用程序 有没有可能通过一个查询传入一个对象来知道从哪个表中提取 例如: var query = from GenericTable.Where(whereClause).Select(ObjectMap); 注意:我知道这不是正确的语法,只是举个例子而已 我的主要目标

以下是我的设想: 我们有一个遗留系统,它有大约100个视图,所有视图都会提取相同的数据列

现在,在我的DataContext中,我拥有上下文中的所有视图,并且每个视图都有一个单独的查询。每个查询的结果都加载到一个列表中,并返回给应用程序

有没有可能通过一个查询传入一个对象来知道从哪个表中提取

例如:

var query = from GenericTable.Where(whereClause).Select(ObjectMap);
注意:我知道这不是正确的语法,只是举个例子而已

我的主要目标是避免在所有查询都是相同的情况下编写100个不同的查询,每次都指向不同的视图

任何建议都是受欢迎的,即使是保留100个查询

谢谢

可以使用一种方法。然后可以使用字符串指定where子句和select

var genericList = GetView("predicate to identify view");
genericList.Where("field1 = @1", value1).select("Field1, Field2");

为linq到sql生成的所有映射类型创建公共接口。然后使用分部类定义将接口添加到所有类中

然后像这样写下您的100个查询:

public IQueryable<T> GetQueryAgainst<T>(IQueryable<T> source,
  string search) where T : IMyData
{
  IQueryable<T> result = source.Where(t => t.Name.Contains(search));
  return result;
}
public IQueryable GetQueryAgainst(IQueryable源代码,
字符串搜索)其中T:IMyData
{
IQueryable result=source.Where(t=>t.Name.Contains(search));
返回结果;
}
把它叫做:

List<Car> cars = GetQueryAgainst(dc.Cars, "Bob").ToList();
List<People> people = GetQueryAgainst(dc.People, "Bob").ToList();
List<Orders> orders = GetQueryAgainst(dc.Orders, "Bob").ToList();
List cars=GetQueryAgainst(dc.cars,“Bob”).ToList();
List people=GetQueryAgainst(dc.people,“Bob”).ToList();
List orders=GetQueryAgainst(dc.orders,“Bob”).ToList();

但视图也需要是动态的。我想我可以使用泛型,传入视图名称并查询它。想法?你所说的“视图也需要动态”是什么意思?在我的回答中,genericList可能是您的观点之一。由于每个视图的字段名称相同,动态Linq允许您指定where和select子句,而不知道视图的具体类型。只要字段的名称与视图中的名称相同,就应该执行查询。是否可以向系统中添加另一个视图?如果是这样的话,您可以创建一个主视图来显示一个鉴别器列。@Isaac--这个主意很有趣,我知道您从这里来,这可能也行。谢谢David,这就是我要找的!