엔티티 유형 속성이없는 동적 LINQ 문 생성
-
06-07-2019 - |
문제
나는 내 엔티티에 존재하는 두 열을 속성으로 쿼리하는 LINQ 문과 엔티티의 데이터베이스에서 열로 존재하는 열을 쿼리하려고합니다.
예를 들어, 책 엔티티 모음이 있습니다. 각 책에는 ID 및 제목 속성과 데이터베이스에 일치하는 열이 있습니다. 그러나 책의 테이블에도 열 필드가 포함되어 있다고 가정 해 봅시다. 작가 그리고 내 책 엔티티에는 이것을 가지고 있지 않습니다.
ID와 제목과 관련된 일반 쿼리는 다음과 같습니다.
Books.Where(b=>b.ID == 123 && b.Title == "Title")
그러나 나는 또한 동등한 것을 동적으로 추가하고 싶습니다. 그리고 저자 = '이름' "위의 쿼리에도. 저자 속성은 책 객체에 존재하지 않습니다.
추가 필드와 포함 해야하는 값은 실제로 사전에서 사용할 수 있습니다. 따라서 여러 가지를 동적으로 추가해야합니다 그리고 [fieldName] = '[value]' 쿼리 조건.
Azure 테이블 스토리지를 사용하고 있다는 사실을 알기 위해 왜 이것이 필요한지 설명하는 데 도움이 될 수 있으며 서적 엔티티를 Azure에 저장된 XML로 바꾸는 직렬화를 무시했습니다.
편집하다 -
동적 LINQ 라이브러리를 사용해 보았지만 작동하지 않습니다.
Books.Where(b=>b.ID == 123 && b.Title == "Title").Where("Author = @0", "SomeName").ToList();
던지기 : System.linq.dynamic.parseexception : '책'유형에는 속성이나 필드가 존재하지 않습니다.
또한,
나는 사용한다는 것을 알고있다 books.addqueryoption ( "$ 필터", "author eq 'somename'")) 그 자체로 사용될 때 작동합니다. 그러나 나는 기존의 Where 진술과 함께 AddQueryOption을 사용하는 방법을 모른다.
해결책 2
LINQ에서는 불가능합니다
다른 팁
예약 할 저자를 추가하지 않으면 저자와 함께 다른 객체를 전달해야합니다.
var x = new { Author="SomeName" };
Books.Where(b=>b.Id == 1 && b.Title == "Alpha").Where("@1.Author == @0", "SomeName", x);
또는 책에서 물려 받고이 목적을 위해 저자 속성을 추가하십시오.
public class BookEx : Book {
public string Author { get; set; }
}
Books.Cast<BookEx>().Where(b=>b.Id == 1 && b.Title== "Alpha").Where("Author == @0", "SomeName");
다음 코드를 시도하십시오.
var result = _tofiObjectList.Where(o => o.GetType() == mainObjType)
.AsQueryable().Cast(relation.MainObject.EntityType).Where(relation.MainObject.Filter);
이것은 확장 방법입니다 IQueryable
유형:
public static IQueryable Cast(this IQueryable source, string type)
{
switch (type)
{
case "TofiDataCollection.Service.TofiEntity.Obj":
return source.Cast<Obj>();
}
return source;
}