У меня есть таблица с именем Предметы ,
У меня есть еще одна таблица под названием Распределения , в которой хранятся Распределения субъектов
У меня есть Datagridview , который заполняется субъектными распределениями из Распределения Таблица
Теперь мне нужно получить Субъекты , которые не в Datagridview
Для этого
- Я получаю все Субъекты из ObjectContext
- Теперь я получаю все Предметы , которые выделены из Datagridview (Возвращает мне InMemory Collection)
- Теперь я использую метод LINQ.EXCEPT для фильтрации результатов, но он выдает следующее исключение,
"Невозможно создать постоянное значение типа" ObjectContext.Subjects "В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid)."
Ниже мой код
public static IOrderedQueryable<Subject> GetSubjects()
{
return OBJECTCONTEXT.Subjects.OrderBy(s => s.Name);
}
private IQueryable<Subject> GetAllocatedSubjectsFromGrid()
{
return (from DataGridViewRow setRow in dgv.Rows
where !setRow.IsNewRow
select setRow.DataBoundItem).Cast<Allocation>() //I know the Problem lies somewhere in this Function
.Select(alloc =>alloc.Subject).AsQueryable();
}
private void RUN()
{
IQueryable<Subject> AllSubjects = GetSubjects(); //Gets
IQueryable<Subject> SubjectsToExclude = GetAllocatedSubjectsFromGrid();
IQueryable<Subject> ExcludedSubjects = AllSubjects.Except(SubjectsToExclude.AsEnumerable());
//Throwing Me "Unable to create a constant value of type 'OBJECTCONTEXT.Subject'. Only primitive types ('such as Int32, String, and Guid') are supported in this context."
}
В результате поиска в Google я обнаружил, что это происходит потому, что LINQ не может сравнивать коллекцию InMemory (записи из DGV) и Objectcontext (FromDB)