Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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# Lambda级联_C#_Sql_Lambda_Asp.net Core - Fatal编程技术网

C# Lambda级联

C# Lambda级联,c#,sql,lambda,asp.net-core,C#,Sql,Lambda,Asp.net Core,我尝试将lambda字符串放入+符号中,但它不允许我运行代码,因为它表示无效表达式 代码顶端 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkC

我尝试将lambda字符串放入+符号中,但它不允许我运行代码,因为它表示无效表达式

代码顶端

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Certifications.Data;
using Certifications.Models;
using Microsoft.EntityFrameworkCore.Internal;

namespace Certifications.Controllers
{
    public class Managerial : Controller
    {
        private readonly CertificationContext _context;

        public Managerial(CertificationContext context)
        {
            _context = context;
        }
滤器

// Approval Filter
string ApprovalFilterBuild = "";

if (approval == "Approved")
{ 
    ApprovalFilterBuild = ".Where(i => i.Approved == true);"; 
}

if (approval == "Revoked")
{
   ApprovalFilterBuild = ".Where(i => i.Approved == false);"; 
}

if (approval == "ALL")
{ 
    ApprovalFilterBuild = ""; 
}
质疑


所有这些Linq方法都返回IQueryable,在您迭代结果之前,它不会对您的数据库执行。因此,您可以简单地执行以下操作:

//Assuming the type name is INT_CertificationsXREF:
IQueryable<INT_CertificationsXREF> certificationContext = _context.INT_CertificationsXREF
    .Include(i => i.INT_CertificationCategories)
    .Include(i => i.INT_Certifications)
    .Include(i => i.INT_CertificationConferred)
    .Include(i => i.RIM_Resource);

if (approval == "Approved")
{
    certificationContext = certificationContext.Where(i => i.Approved == true);
}
else if (approval == "Revoked")
{
    certificationContext = certificationContext.Where(i => i.Approved == false);
}

为了确保它同时适用于IEnumerable和IQueryable,您可以使用以下代码:

var certificationContext = _context.INT_CertificationsXREF
        .Include(i => i.INT_CertificationCategories)
        .Include(i => i.INT_Certifications)
        .Include(i => i.INT_CertificationConferred)
        .Include(i => i.RIM_Resource).AsEnumerable();

if (approval == "Approved") 
{
    certificationContext = certificationContext.Where(i => i.Approved).AsEnumerable();
}
if (approval == "Revoked")
{ 
certificationContext = certificationContext.Where(i => !i.Approved).AsEnumerable();
}
var result  = certificationContext.Where(i => i.RIM_Resource.LAN == i.RIM_Resource.LAN).Where(i => LANlist.Contains(i.RIM_Resource.LAN));

结果变量将具有所需的结果。

批准筛选器需要是lambda表达式,而不是字符串。这就是您构建它的方式

// Approval Filter
Expression<Func<INT_CertificationsXREF, bool>> ApprovalFilterBuild;

if (approval == "Approved")
{ 
    ApprovalFilterBuild = i => i.Approved == true;
}

if (approval == "Revoked")
{
   ApprovalFilterBuild = i => i.Approved == false;
}

if (approval == "ALL")
{ 
    ApprovalFilterBuild = i => true;
}

如果批准可以不是3个检查中的任何一个,那么考虑将默认值分配给I==Trase

,因为何时可以用实际代码来勾结简单字符串?您试图用字符串连接表达式,不能。那么,您将如何处理?我只是一名实习生。请参阅张贴的答案。这就是你想要处理它的方式。如果您绝对需要使用字符串,即,您正在从外部源读取数据,您可以使用反射来完成此操作。风格诡辩:您不应该显式地比较true和false。您不应该对这些操作使用AsEnumerable,因为您希望它们在DB上执行,而不是在内存中执行。如果希望避免显式键入变量,可以使用AsQueryable;这段对话已经结束。
// Approval Filter
Expression<Func<INT_CertificationsXREF, bool>> ApprovalFilterBuild;

if (approval == "Approved")
{ 
    ApprovalFilterBuild = i => i.Approved == true;
}

if (approval == "Revoked")
{
   ApprovalFilterBuild = i => i.Approved == false;
}

if (approval == "ALL")
{ 
    ApprovalFilterBuild = i => true;
}
var certificationContext = _context.INT_CertificationsXREF
    .Include(i => i.INT_CertificationCategories)
    .Include(i => i.INT_Certifications)
    .Include(i => i.INT_CertificationConferred)
    .Include(i => i.RIM_Resource)
    .Where(ApprovalFilterBuild)
    .Where(i => i.RIM_Resource.LAN == i.RIM_Resource.LAN)
    .Where(i => LANlist.Contains(i.RIM_Resource.LAN));