Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq筛选存储过程结果_C#_Sql Server_Entity Framework_Linq - Fatal编程技术网

C# 使用Linq筛选存储过程结果

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,

我有这段代码,它使用SP和EF从服务器获取日期

  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函数