tinySharkk
tinySharkk

Reputation: 1

How to use Query to add value in IQueryable?

I want to add a value in IQueryable get from another IQueryable here is my code

var queryReturnRequest = query.Include(x => x.Assignment)
                .ThenInclude(x => x.Asset).Select(x => new ReturnRequestDto
                {
                    AssetCode = x.Assignment.Asset.Code,
                    AssetName = x.Assignment.Asset.Name,
                    Id = x.Id,
                    ReturnDate = x.ReturnDate,
                    AssignedDate = x.Assignment.AssignedDate,
                    State = x.State,
                    UserRequestId = x.UserRequestId,
                    UserAcceptId = x.UserAcceptId,
                    RequestedBy = userList.FirstOrDefault(u => u.Id == x.UserRequestId) != null ? userList.FirstOrDefault(u => u.Id == x.UserRequestId).UserName : "",
                    AcceptedBy = userList.FirstOrDefault(u => u.Id == x.UserAcceptId) != null ? userList.FirstOrDefault(u => u.Id == x.UserAcceptId).UserName : "",
                });

But it was crashed and return error 500, I found out that was because of userList.FirstOrDefault but when I console.log() it just work fine. So what wrong with it and is there another way to add it in IQueryable ?

I tried to user for loop to add IQueryable but it just return to null after get our of loop.

Upvotes: 0

Views: 441

Answers (1)

Svyatoslav Danyliv
Svyatoslav Danyliv

Reputation: 27302

Try rewrite query in the following way. Also note that Select discards Includes, so avoid them in such case.

var queryReturnRequest = query
    .Select(x => new ReturnRequestDto
    {
        AssetCode = x.Assignment.Asset.Code,
        AssetName = x.Assignment.Asset.Name,
        Id = x.Id,
        ReturnDate = x.ReturnDate,
        AssignedDate = x.Assignment.AssignedDate,
        State = x.State,
        UserRequestId = x.UserRequestId,
        UserAcceptId = x.UserAcceptId,
        RequestedBy = userList.Where(u => u.Id == x.UserRequestId).Select(x => x.UserName).FirstOrDefault() ?? "",
        AcceptedBy = userList.Where(u => u.Id == x.UserAcceptId).Select(x => x.UserName).FirstOrDefault() ?? "",
    });

Upvotes: 1

Related Questions