How to query in linq and check if the passed value is empty

Viewed 58

I want to check if i don't pass value to request.levelId and request.teacherId will take all data in table ? (request.levelId and request.teacherId have data type is int?). Someone help me

var query = from ls in _dbContext.GuideLine
                        join lv in _dbContext.Level on ls.LevelId equals lv.Id
                        join tc in _dbContext.Teacher on ls.TeacherId equals tc.Id
                        where ls.LevelId == request.levelId && ls.TeacherId == request.teacherId
                        select new { ls, lv, tc };
2 Answers

I think the two conditions should be independent of each other, otherwise when one of them(request.levelId and request.teacherId) is null, the query will return empty.

var query = from ls in _dbContext.GuideLine
            join lv in _dbContext.Level on ls.LevelId equals lv.Id
            join tc in _dbContext.Teacher on ls.TeacherId equals tc.Id
            where request.levelId == null || ls.LevelId == request.levelId && request.teacherId == null || ls.TeacherId == request.teacherId
            select new { ls, lv, tc };

Try this -

var query = from ls in _dbContext.GuideLine
                        join lv in _dbContext.Level on ls.LevelId equals lv.Id
                        join tc in _dbContext.Teacher on ls.TeacherId equals tc.Id
                        where (request.levelId == null && request.teacherId == null) || 
                        (ls.LevelId == request.levelId && ls.TeacherId == request.teacherId) 
                        select new { ls, lv, tc };
Related