【发布时间】:2022-01-01 09:28:21
【问题描述】:
我有两种材料请求和安全用户模型:
public class MaterialRequestMaster : BaseDomain<long>
{
public string RequestCode { get; private set; }
public string Description { get; private set; }
public GlobalEnums.MaterialRequestStatus Status { get; set; }
public int UserId { get; private set; }
public SecurityUser User { get; private set; }
}
public class SecurityUser :IdentityUser<int>
{
public string Name { get; set; }
public int PersonelCodeId { get; set; }
public ICollection<MaterialRequestMaster> MaterialRequestMaster { get; set; }
}
我想根据用户名搜索材料请求,所以我制作了一个这样的材料请求视图模型:
public class MaterialRequestMasterViewModel
{
public long Id { get; set; }
[Required(ErrorMessage = "Please Enter The Code")]
public string RequestCode { get; set; }
public GlobalEnums.MaterialRequestStatus Status{ get; set; }
[MaxLength(255)]
public string Description { get; set; }
public int UserId { get; set; }
public string UserName { get; set; }
public bool IsDeleted { get; set; }
public DateTime CreationDate { get; set; }
}
我从视图中获取用户名并创建一个 where 字符串,如“x=>x.UserName.Contains("Something")”,并将其作为 searchQuery 发送到我的材料请求搜索方法:
public IPagedList<MaterialRequestMasterViewModel> GetPagedRecords(int pageNumber, int pageSize, string orderByCol, string order, string searchQuery)
{
IQueryable<MaterialRequestMaster> query;
query = query = _IMRMRepository.Get(); //Gets all records of <MaterialRecustMaster>
IQueryable<MaterialRequestMasterViewModel> searchedQuery;
searchedQuery = query.Select(n => new MaterialRequestMasterViewModel //Fill ViewModel
(
n.Id,
n.RequestCode,
n.Status,
n.Description,
n.UserId,
n.User.Name,
n.CreationDate,
n.IsDeleted
));
if (!string.IsNullOrWhiteSpace(searchQuery))
searchedQuery = searchedQuery.Where(searchQuery);
return searchedQuery.ToPagedList(pageNumber, pageSize);
}
由于 LINQ 转换问题,ToPagedList() 方法无法执行查询。 这是一个正确的方法吗?
【问题讨论】:
-
当然应该在搜索中尽早使用
Where;如果搜索没有返回,返回什么?
标签: c# linq asp.net-core model-view-controller viewmodel