Я пытаюсь использовать LINQ для объединения двух запросов левого соединения. Мне нужно установить нулевые ячейки в 0, но я не могу понять, как сделать второе объединение с идентификатором null, потому что компилятору это не нравится, потому что идентификатор не равен null.
Я пробовал несколько разных запросов: соединение, нет соединения, defaultIfEmpty, IfNotNull.
Мое объединение выглядит так, но не компилируется, потому что b.ID не имеет значения null (даже если я присоединяюсь в SQL, это поле равно нулю, когда в таблице ACCESS_LEVEL нет соответствующей записи.
var resultActions = (from a in maax.CODE_TABLE.Where(a => (a.CODE_TABLE_NAME == "ACTION"))
from b in maax.ACCESS_LEVEL
.Where(b => (a.ID == b.ACTION_ID) && (functAreaId == b.FUNCT_AREA_ID) && (accessLevel == b.ACCESS_LEVEL_ID) && (b.ID > 0))
.DefaultIfEmpty()
select new UserAction()
{
ACCESS_LEVEL = b.ACCESS_LEVEL_ID,
FUNCTIONAL_AREA_ID = b.FUNCT_AREA_ID,
ACTION_ID = a.ID,
ACTION_NAME = a.CODE,
isCheckeddb = true
})
.Union(from a in maax.CODE_TABLE.Where(b => (b.CODE_TABLE_NAME == "ACTION"))
from b in maax.ACCESS_LEVEL.DefaultIfEmpty()
.Where(b => (a.ID == b.ACTION_ID) && (functAreaId == b.FUNCT_AREA_ID) && (accessLevel == b.ACCESS_LEVEL_ID) && (b.ID is null))
select new UserAction()
{
ACCESS_LEVEL = 0,
FUNCTIONAL_AREA_ID = b.FUNCT_AREA_ID,
ACTION_ID = a.ID,
ACTION_NAME = a.CODE,
isCheckeddb = false
}).ToList();
Я также пробовал этот запрос, но он взрывается, потому что b.ACCESS_LEVEL_ID и b.FUNCT_AREA_ID равны нулю. Я попытался сделать их строками в моей модели, но это не сработает, так как мне нужно привести их в строку.
var resultActions = (from a in maax.CODE_TABLE.Where(a => (a.CODE_TABLE_NAME == "ACTION"))
from b in maax.ACCESS_LEVEL
.Where(b => (a.ID == b.ACTION_ID) && (functAreaId == b.FUNCT_AREA_ID) && (accessLevel == b.ACCESS_LEVEL_ID))
.DefaultIfEmpty()
select new UserAction()
{
ACCESS_LEVEL = b.ACCESS_LEVEL_ID,
FUNCTIONAL_AREA_ID = b.FUNCT_AREA_ID,
ACTION_ID = a.ID,
ACTION_NAME = a.CODE
}).ToList();
Я хотел бы получить что-то подобное, чтобы я мог использовать true / false, чтобы определить, должен ли быть установлен флажок в моем представлении.
ID code ID FUNCT_AREA_ID ACCESS_LEVEL_ID (No column name)
1004 SEARCH 712 1000 2 true
1005 SEARCH_MINE 713 1000 2 true
1006 READ 714 1000 2 true
1007 CREATE 715 1000 2 true
1008 UPDATE 716 1000 2 true
1009 DELETE NULL NULL NULL false
1010 APPROVE NULL NULL NULL false
1011 DENY NULL NULL NULL false
1043 BATCH_RESEND NULL NULL NULL false