C# 使用Linq筛选存储过程结果
我有这段代码,它使用SP和EF从服务器获取日期C# 使用Linq筛选存储过程结果,c#,sql-server,entity-framework,linq,C#,Sql Server,Entity Framework,Linq,我有这段代码,它使用SP和EF从服务器获取日期 List<sp_PlacementSearchResult_Result> listResults = new List<sp_PlacementSearchResult_Result>(); var query = Context.sp_PlacementSearchResult(request.HasamaFormId, request.DepartmentId, request.InstitutionNum,
List<sp_PlacementSearchResult_Result> listResults = new List<sp_PlacementSearchResult_Result>();
var query = Context.sp_PlacementSearchResult(request.HasamaFormId, request.DepartmentId, request.InstitutionNum, request.IsSigned).AsQueryable();
在函数的末尾,当我尝试执行
listResults = query.ToList();
我得到一个错误,“可空对象必须有一个值。”ToList()只有在进入if语句时才会失败 附言: 首先,我在没有SP的情况下使用EF进行了如下查询:
if (role.PermissionId.Equals((int)Permission.Institution))
{
query = query.Where(form => PropRole.InstitutionNum.Contains((int)form.OrganizationOrInstitutionNum));
}
var query = Context.APP_AuthorityHasamaForm.AsQueryable();
这样,即使ToList()进入if语句,我也不会有任何问题
塔克斯
编辑:这是所有功能:
IEnumerable<sp_PlacementSearchResult_Result> IAuthorityHasamaFormRepository.GetByRequestFromSP(PlacementRequest request, APP_Role role, PropertiesRole PropRole)
{
List<sp_PlacementSearchResult_Result> listResults = new List<sp_PlacementSearchResult_Result>();
request.HasamaFormId = (request.HasamaFormId > 0) ? request.HasamaFormId : null;
request.InstitutionNum = (request.InstitutionNum > 0) ? request.InstitutionNum : null;
if (request.StartDate.HasValue)
{
request.StartDate = new DateTime(request.StartDate.Value.Year, request.StartDate.Value.Month, request.StartDate.Value.Day, 00, 00, 00);
}
if (request.EndDate.HasValue)
{
request.EndDate = new DateTime(request.EndDate.Value.Year, request.EndDate.Value.Month, request.EndDate.Value.Day, 00, 00, 00);
}
var query = Context.sp_PlacementSearchResult(request.HasamaFormId, request.DepartmentId, request.InstitutionNum, request.IsSigned, request.IdentityIdSign,
request.StartDate, request.EndDate, request.AuthorityNum, request.CertificateNum, null).AsQueryable();
if (role.PermissionId.Equals((int)Permission.Department))
{
query = query.Where(form => PropRole.DepartmentId.Contains(form.DepartmentId));
}
if (role.PermissionId.Equals((int)Permission.Institution))
{
query = query.Where(form => PropRole.InstitutionNum.Contains((int)form.OrganizationOrInstitutionNum));
}
try
{
listResults = query.ToList();
return listResults;
}
catch (Exception e)
{
throw;
}
listResults = query.ToList();
return listResults;
}
IEnumerable IAAuthorityHasAMAFormRepository.GetByRequestFromSP(PlacementRequest请求,应用程序角色,属性角色PropRole)
{
List listResults=新列表();
request.HasamaFormId=(request.HasamaFormId>0)?request.HasamaFormId:null;
request.InstitutionNum=(request.InstitutionNum>0)?request.InstitutionNum:null;
if(request.StartDate.HasValue)
{
request.StartDate=新的日期时间(request.StartDate.Value.Year、request.StartDate.Value.Month、request.StartDate.Value.Day、00、00);
}
if(request.EndDate.HasValue)
{
request.EndDate=新的日期时间(request.EndDate.Value.Year、request.EndDate.Value.Month、request.EndDate.Value.Day、00、00);
}
var query=Context.sp_PlacementSearchResult(request.hasamformid、request.DepartmentId、request.InstitutionNum、request.IsSigned、request.IdentityIdSign、,
request.StartDate、request.EndDate、request.AuthorityNum、request.CertificateNum、null).AsQueryable();
if(role.PermissionId.Equals((int)Permission.Department))
{
query=query.Where(form=>PropRole.DepartmentId.Contains(form.DepartmentId));
}
if(role.PermissionId.Equals((int)Permission.Institution))
{
query=query.Where(form=>PropRole.InstitutionNum.Contains((int)form.OrganizationOrInstitutionNum));
}
尝试
{
listResults=query.ToList();
返回列表结果;
}
捕获(例外e)
{
投掷;
}
listResults=query.ToList();
返回列表结果;
}
<代码> > p>您应该考虑可能的空值<代码>窗体。OrganizationOrInstitutionNum < /代码> < /P>
if (role.PermissionId.Equals((int)Permission.Institution))
{
query = query.Where(form => form.OrganizationOrInstitutionNum != null && PropRole.InstitutionNum.Contains(form.OrganizationOrInstitutionNum.Value));
}
在您的模式中,您不指定哪种类型是可为空的类型。还有一些可能性。对于样品,状态波纹管如下所示:
query = query.Where(form => PropRole.InstitutionNum.Contains((int)form.OrganizationOrInstitutionNum));
如果form.OrganizationOrInstitutionNum
为空,则转换为int
将失败。试试这个:
query = query.Where(form => form.OrganizationOrInstitutionNum.HasValue && PropRole.InstitutionNum.Contains((int)form.OrganizationOrInstitutionNum.Value));
也许你可以保存以进行转换。什么是“函数结束时”。你能给我们看一下你在'if``块周围的代码吗,或者你的整个函数。我添加了all函数