代码之家  ›  专栏  ›  技术社区  ›  CodeLikeBeaker

LINQ-100个视图-相同的列-常规查询

  •  2
  • CodeLikeBeaker  · 技术社区  · 16 年前

    下面是我的场景: 我们有一个遗留的系统,它有大约100个视图,所有视图都可以提取价值相同的数据列。

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

    是否可以有一个可以传入对象的查询来知道从哪个表中提取?

    例子:

    var query = from GenericTable.Where(whereClause).Select(ObjectMap);
    

    注意:我知道这不是正确的语法,只是举个例子而已。

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

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

    谢谢!

    2 回复  |  直到 16 年前
        1
  •  2
  •   Amy B    16 年前

    为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;
    }
    

    就像这样称呼它:

    List<Car> cars = GetQueryAgainst(dc.Cars, "Bob").ToList();
    List<People> people = GetQueryAgainst(dc.People, "Bob").ToList();
    List<Orders> orders = GetQueryAgainst(dc.Orders, "Bob").ToList();
    
        2
  •  0
  •   AxelEckenberger    16 年前

    一种方法是 Dynamic Linq .然后可以指定WHERE子句和SELECT using字符串。

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