Я не уверен, какие у вас настройки с самого начала, но есть способы удовлетворить ваши требования, используя LINQ.Например:
var desiredActivity = Activity;
var class1Names = DbContext.Class1.Where(e => e.Activities.Contains(desiredActivity).Select(e => e.Name)
var class2Names = DbContext.Class2.Where(e => e.Activities.Contains(desiredActivity).Select(e => e.Name)
var listOfNames = new List<string>;
listOfNames.AddRange(class1Names);
listOfNames.AddRange(class2Names);
Возможно, это не самое оптимальное решение, но вы не предоставили столько информации о том, что вы хотите сделать со своим бизнес-объектом.
Редактировать:
Ссылаясь на вашу ViewModel, у вас есть список желаемых действий, теперь вы хотите знать, какой объект класса содержит это действие, тогда вы можете сделать:
var listOfNames = new List<string>;
foreach (var activity in Activities)
{
var class1Names = DbContext.Class1.Where(e => e.Activities.Contains(activity).Select(e => e.Name)
var class2Names = DbContext.Class2.Where(e => e.Activities.Contains(activity).Select(e => e.Name)
listOfNames.AddRange(class1Names);
listOfNames.AddRange(class2Names);
}
Теперь вы можете удалить дубликаты из listOfNames, вызвав
var fixedListOfNames = new List<string>;
fixedListOfNames.AddRange(listOfNames.Distinct());
И если вы хотите получить списки ваших объектов, вы можете сделать следующее:
var listOfClasses1 = new List<Class1>;
var listOfClasses2 = new List<Class2>;
foreach (var activity in Activities)
{
var class1Names = DbContext.Class1.Where(e => e.Activities.Contains(activity);
var class2Names = DbContext.Class2.Where(e => e.Activities.Contains(activity);
listOfClasses1.AddRange(class1Names);
listOfClasses2.AddRange(class2Names);
}
I 'Я не уверен насчет вашей конфигурации, но вам также может понадобиться добавить
using System.Data.Entity
и / или .Include(e => e.Activities)
к вашим запросам.
Наконец, на вашем местеЯ бы создал класс бизнес-объектов, содержащий свойства, требуемые вашей DataGrid, чтобы они не работали с объектами БД.