Обнуляемый объект должен иметь значение в запросе таблиц соединения - PullRequest
0 голосов
/ 31 марта 2020

У меня есть три таблицы TableTeam, TableUser и TableLink. Я хочу присоединиться к ним, чтобы получить список.

var teams = _db.TableTeam;
var users = _db.TableUser;
var managerIds = teams.Select(x=>x.ManagerId).ToList();
var list = (from user in _db.TableUser
        where user.EndDate == null && user.ManagerId != null && managerIds.Contains(user.ManagerId.Value)
        let r = _db.TableLink.FirstOrDefault(l => l.ProjectId == projectId && l.UserId  == user.UserId)
        let t = _db.TableTeam.FirstOrDefault(m => m.ManagerId == user.ManagerId)
        select new MyDto
        {
            ProjectId = projectId,
            UserId = user.UserId,
            IsAssigned = r.AssignedId > 0 ?true : false,
            AssignedId = r.AssignedId,
            Percent = r.Percent.HasValue ? (r.Percent.Value).ToString() + "%": ""
        }).GroupBy(d => d.UserId).ToList();

Для таблицы TableLink соответствующий класс dataSet в каркасе сущностей:

public LinkDto
{
   public int AssignedId {get;set;}
   public short ProjectId {get;set;}
   public short UserId {get;set;}
   public decimal? Percent {get;set;}
   // ...
}   

Однако я получил ошибку:

Обнуляемый объект должен иметь значение

Я думаю, что это может быть вызвано decimal? Percent. Но не уверен, как это исправить. Также я могу использовать процедуру store d, что означает, что если вы можете решить ее с помощью SQL запроса, это тоже замечательно.

1 Ответ

0 голосов
/ 31 марта 2020

Оказывается, я должен переместить let коды до where предложения, а затем добавить условие к where.

Например,

var list = (from user in _db.TableUser
    let r = _db.TableLink.FirstOrDefault(l => l.ProjectId == projectId && l.UserId  == user.UserId)
    let t = _db.TableTeam.FirstOrDefault(m => m.ManagerId == user.ManagerId)
    where user.EndDate == null && user.ManagerId != null && managerIds.Contains(user.ManagerId.Value) 
    && r != null && t != null
    select new MyDto
    {
        ProjectId = projectId,
        UserId = user.UserId,
        IsAssigned = r.AssignedId > 0 ?true : false,
        AssignedId = r.AssignedId,
        Percent = r.Percent.HasValue ? (r.Percent.Value).ToString() + "%": ""
    }).GroupBy(d => d.UserId).ToList();
...