использование объединения на скомпилированных запросах linq - PullRequest
2 голосов
/ 21 апреля 2011

Я пытаюсь найти лучший способ использовать объединение с linq.

В настоящее время мне нужно скомпилировать запросы с такой же подписью:

public Func<DataContext, int, IQueryable<Item>> Query1
public Func<DataContext, int, IQueryable<Item>> Query2

и в моем классе репозитория iЯ делаю что-то по ссылке:

using (DataContext context = new DataContext(ConnectionString)) {
    return _queries.Query1(context, id).Union(
        _queries.Query2(context, id));
}

, но что-то говорит мне, что объединение должно быть внутри скомпилированного запроса.Примерно так: (этот код не скомпилируется)

public Func<DataContext, int, IQueryable<Item>> Query1 = 
    CompiledQuery.Compile((DataContext context, int id) =>
    from table1 in context.GetTable<Table1>()
    where table1.foreignId = id
    select new Item(table1)
    union
    from table2 in context.GetTable<Table2>()
    where table2.foreignId = id
    select new Item(table2));

Есть ли способ достичь этого?

1 Ответ

3 голосов
/ 21 апреля 2011

Попробуйте:

 public Func<DataContext, int, IQueryable<Item>> Query1 = 
    CompiledQuery.Compile((DataContext context, int id) =>
      (from table1 in context.GetTable<Table1>()
      where table1.foreignId = id
      select new Item(table1))
    .Union(
      (from table2 in context.GetTable<Table2>()
      where table2.foreignId = id
      select new Item(table2))
    ));
...