나는 웹에 이것의 많은 예가 있다는 것을 알고 있지만, 이것을 작동시키지 못하는 것 같습니다.
이것을 설정해 보도록하겠습니다. 값 범위에 제한이 필요한 사용자 정의 개체 목록이 있습니다.
UI의 일부 작업에 따라 변경되는 정렬 변수가 있으며 그에 따라 객체를 다르게 처리해야합니다.
여기 내 물건이 있습니다 :
MyObject.ID - Just an identifier
MyObject.Cost - The cost of the object.
MyObject.Name - The name of the object.
이제 비용의 범위를 기준으로 필터링해야하므로 두 가지 속성 중 하나에 의해 제한 될 수 있다는 점을 고려할 때 이와 비슷한 것을 갖게됩니다.
var product = from mo in myobject
where mo.Cost <= 10000
또는
var product = from mo in myobject
where mo.Name equals strName
이제 프로젝트에 동적 linq가 있지만 실제로 몇 가지 예제를 수행 할 때처럼 실제로 작동하는 방법을 알지 못합니다.
Func<Tsourse>bool> predicate
옵션으로.
업데이트 : 코드를 Objectify하는 데 도움이되는 솔루션을 찾으려고 노력 중입니다. 지금은 linq 쿼리에 대한 많은 복사 및 붙여 넣기입니다.
업데이트 2 : 다음과 같은 명백한 성능 차이가 있습니까?
var product = from mo in myobject
... a few joins ...
where mo.Cost <= 10000
과
var product = (from mo in myobject
... a few joins ...)
.AsQueryable()
.Where("Cost > 1000")
직접 질문에 대답하지는 않지만 여기서는 DynamicQuery가 필요하지 않습니다. 이 쿼리를 다음과 같이 작성할 수 있습니다.
public IEnumerable<MyObject> GetMyObjects(int? maxCost, string name)
{
var query = context.MyObjects;
if (maxCost != null)
{
query = query.Where(mo => mo.Cost <= (int)maxCost);
}
if (!string.IsNullOrEmpty(name))
{
query = query.Where(mo => mo.Name == name);
}
return query;
}
조건이 상호 배타적 인 if
두 번째 if
를 else if
로 변경하십시오.
이 패턴을 항상 사용합니다. "동적 쿼리"가 실제로 의미하는 것은 순수한 SQL과 Linq를 결합하는 것입니다. 즉석에서 조건을 생성하는 데 큰 도움이되지는 않습니다.
using System.Linq;
var products = mo.Where(x => x.Name == "xyz");
var products = mo.Where(x => x.Cost <= 1000);
var products = mo.Where(x => x.Name == "xyz" || x.Cost <= 1000);