Left Outer Join получает нули - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...