문제

다음 단계로 다음이 가능 해지 여부를 확인하려고합니다.

본질적으로 필드 이름 (문자열) 및 값에서 메커니즘을 만들고 싶습니다. 엔티티의 메타 데이터에서 필드 이름을 동적으로 찾고 해당 정보를 기반으로 LINQ 쿼리를 만듭니다.

단일 테이블에 대해 걱정할 필요가 있으며 테이블의 열은 모두 strings / varchars입니다.

그래서, 예를 들어, 테이블이있는 경우 :

MyTable
----------------- 
Field1 
Field2 
Field3 
etc.
.

및이 테이블은 EF에서 생성되었으며 다음과 같이 할 수 있습니다 :

var 결과= CreateDyNamicQuery ( "field3", "내 값");

및 i이를 EF / LINQ 쿼리로 변환 할 수 있습니다.

이 이유가 필요한 이유는 복잡하지만이 경우보다 일반적인 쿼리 메커니즘이 작동하지 않습니다.내가 피하려고하는 것은 문자열 기반 SQL 솔루션입니다.

이이 가능합니다.

도움이 되었습니까?

해결책

LINQ 표현식 트리 및 엔티티 프레임 워크를 사용하여 쿼리를 작성하는 방법은 간단한 동적 쿼리를 만드는 방법입니다.

public void TestEF()
    {
        using (DbContext db = new ElFaktura.Data.CustomerEntities())
        {
            var expr = CreateQuery<Customer>("FirstName", "Lorentz");
            var result = db.Set<Customer>().Where(expr);
            Debug.Print(result.ToString());
        }
    }

    public Expression<Func<Customer, bool>> CreateQuery<T>(string field, string value)
    {
        var paramExpr = Expression.Parameter(typeof(T));
        var propExpr = Expression.Property(paramExpr, field);
        var equalsExpr = Expression.Equal(propExpr, Expression.Constant(value));
        return Expression.Lambda<Func<Customer,bool>>(equalsExpr, paramExpr);
    }
.

결과 SQL은

입니다.
SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[Email] AS [Email], 
[Extent1].[AddressID] AS [AddressID], 
[Extent1].[FirstName] AS [FirstName], 
[Extent1].[LastName] AS [LastName]
FROM [dbo].[Customers] AS [Extent1]
WHERE (N'Lorentz' = [Extent1].[FirstName])
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top