как сравнить уникальный идентификатор с Linq - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть представление и сущность

          var q = from stud in context.CollegePlans                                       
                 where stud .Meta.Active == true &&
                stud .CreatedBy_Id == user.Id
                select stud ;

        var k = from nv in context.vw_Year_Plans 
                 where ( nv.StudentId == q.Where( p => p.Section.StudentId))
                select nv;

studenId - это Guid как в представлении, так и в сущности.закинуть .. как это побороть?

1 Ответ

1 голос
/ 16 февраля 2012

Выражение, оцененное с помощью Where, должно быть оценено как логическое значение.

where ( nv.StudentId = q.Where( p => p.Section.StudentId))

В этом случае вы дали ему Guid.Вот откуда исходит ошибка.Я думаю, что у вас будут проблемы с этой строкой, даже если предикат Where действителен.Судя по всему, вы хотите, чтобы все StudentId в context.vw_Year_Plans были также в q.

Простой способ сделать это - создать промежуточную коллекцию идентификаторов.в q для целей сравнения.

var temp = q.Select(a => a.Section.StudentId);

Затем посмотрите, есть ли каждый StudentId в context.vw_Year_Plans

var k = from nv in context.vw_Year_Plans
        where (temp.Contains(nv.StudentId)) 
        select nv;

Существуют лучшие способы решения этой проблемы, но этодолжен помочь вам.

РЕДАКТИРОВАТЬ

Вы упомянули использование join в своем комментарии.Я не тестировал ни одно из этих решений, но это должно быть то, что вам нужно.Если у вас все еще есть проблемы, обновите свой вопрос, указав более подробную информацию о проблемах, с которыми вы столкнулись.

var k = from nv in context.vw_Year_Plans
        join p in q on nv.StudentId equals p.Section.StudentId  
        select nv;
...