0

我的控制器出现一些错误。
起初,我得到了供应商列表,然后我得到了所有供应商的 ID,然后我得到了每个供应商的所有用户。

public ActionResult Grid(bool? active)
    {
        var suppliers = Context.Suppliers.AsNoTracking()
            .WhereIf(active != null, e => e.Active == active)
            .Select(e => new SupplierRow
                            {
                                Id = e.Id,
                                FullName = e.FullName,
                                Active = e.Active,
                                Visits = e.Visits,

                            })
                            .ToList();


        List<int> supplierIds = new List<int>();
        foreach (SupplierRow sr in suppliers)
        {
            supplierIds.Add(sr.Id);
        }

        var users = Context.Users.AsNoTracking()
            .Where(e => supplierIds.Contains(e.SupplierId))
            .Select(e => new UserRow
            {
                Id = e.Id,
                FullName = e.FullName,
                Email = e.Email,
                Name = e.Name,
                Status = e.Status,
                Role = e.Role,
                SupplierId = e.SupplierId
            }).toList();

        foreach (UserRow ur in users) 
        {
            foreach (SupplierRow sr in supplier) 
            {
                if (ur.SupplierId == sr.Id) 
                {
                    sr.Users.Add(ur);
                } 
            }
        }

        return PartialView("_Grid", suppliers);
    }

这里
在此处输入图像描述

在这里在此处输入图像描述
我的代码有什么问题?如何解决?

4

1 回答 1

1

问题是您试图将Guid对象添加到只接受int值的集合中。你User.SupplierIdGuid?(或Nullable<Guid>)类型的对象,Supplier.Id而是Guid。通过将集合声明为:

List<Guid> supplierIds = new List<Guid>();

然后在你的代码中使用:

foreach(SupplierRow sr in suppliers)
{
    supplierIds.Add(sr.Id);
}

对用户做同样的事情,除了你必须使用SupplierId.HasValueSupplierId.Value检查它是否有一个值并读取这个值。这是因为它被声明为可为空的 Guid。

于 2013-06-06T10:23:45.113 回答