>source

예: SQL 매개변수가 있는 WHERE 절로 변환되도록 술어 표현식을 작성하고 싶습니다.

WHERE e.Id= @id_1;

이 code가 있습니다.

int id= 1;
Expression<Func<Entity, int>> keySelector= e=> e.Id;
BinaryExpression equals= Expression.Equal(
   keySelector.Body,
   Expression.Constant(id, keySelector.Body.Type)); //replace this with a variable
var predicate= Expression.Lambda<Func<Entity, bool>>(equals, keySelector.Parameters[0]);

하지만 다음과 같이 번역됩니다.

WHERE e.Id= 1;

각 ID에 대한 새 쿼리 실행 계획을 생성합니다.

EF 코어는 내가 사용할 수 있는(해야 하는) 내부 메커니즘을 제공합니까? Expression의 특별한 하위 클래스 또는 ExpressionVisitor?

  • 답변 # 1

    EF 코어는 내가 사용할 수 있는(해야 하는) 내부 메커니즘을 제공합니까? Expression의 특별한 하위 클래스 또는 ExpressionVisitor?

    특별한 것은 없습니다. C# 클로저를 에뮬레이트하기만 하면 됩니다. 이것은 여러 가지 방법으로 수행할 수 있습니다. 익명 유형, 구체적인 유형,튜플또는 실제 C# 컴파일러에서 다음과 같은 클로저를 생성했습니다.

    int id= 1;
    Expression<Func<int>> valueSelector= ()=> id;
    var value= valueSelector.Body; //use this in place of Expression.Constant
    

    익명 유형 접근 방식의 예

    int id= 1;
    var variable= new { id };
    var value= Expression.Property(Expression.Constant(variable), nameof(id));
    

    비슷새로운 튜플< 정수> (ID)그리고항목1.

  • 이전 새 줄이 작동하지 않는 PHP 컬 -없으면
  • 다음 python : Django 프로젝트 암호화