我列出了_db.Clients
中的50个第一个客户以及_db.Fines
中每个客户的罚款。
我想将这些客户推送到ClientFineView
模型,其TotalEquity
总和来自_db.Fines
。
但我收到了这个错误:
演员价值类型' System.Int32'失败,因为具体化值为null。结果类型的通用参数或查询必须使用可空类型。
我猜,我的分组查询不正确,因此无法找到所选的值。 那么我需要做些什么来解决这个问题呢?我将非常感激
LINQ:
IEnumerable<TraderView> clients = await (
from client in _db.Clients.Take(50)
join trade in _db.Fines
on client.Id equals trade.ClientId
select new
{
client,
trade
} into clientTrades
group clientTrades by clientTrades.trade.ClientId into tq
select new ClientFineView
{
TotalEquity = tq.Sum(x=>x.trade.TotalEquity),
Username = tq.FirstOrDefault().client.Username,
Email = tq.FirstOrDefault().client.Email,
Id = tq.FirstOrDefault().client.Id,
Firstname = tq.FirstOrDefault().client.Firstname,
Lastname = tq.FirstOrDefault().client.Lastname
}).ToListAsync();
ClientFineView模型:
public class ClientFineView
{
public int Id { get; set; }
public string Username { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Email { get; set; }
public DateTime Created { get; set; }
public decimal TotalEquity { get; set; }
}
客户端模型
public class Client
{
public int Id { get; set; }
public string Username { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public DateTime Created { get; set; }
}
答案 0 :(得分:0)
我猜这是导致错误
parent_
Obs child_id id address parent_address
1 1 501 \partNumber\a$\sometext....\ \partNumber\a$\
2 2 . no_parent
如果源为null sum将抛出一个参数null异常 只需添加一个检查,如果count大于0,则获取总和,如果没有将其设置为0
TotalEquity = tq.Sum(x=>x.trade.TotalEquity)
更新
如果您仍然收到错误,或者您有其他错误 尝试检查tq的计数,因为某些客户端可能有0个罚款,当您尝试使用FirstOrDefault()时将返回null 所以你要在选择之前添加这个检查
TotalEquity = tq.Select(e => e.trade).Count() > 0 ? tq.Sum(x=>x.trade.TotalEquity) : 0
答案 1 :(得分:0)
我遇到了同样的麻烦。在group by
查询之前,您应该首先同时选择client
和trade
个模型。然后随意使用它们。