문제

Ok,I 이 질문하기 전에,그러나 그것을 삭제하는 방법으로 갔에 대해 설명하는 내 문제는 잘못됐다.

첫째,내가 국가를 만들기.NET3.5Winforms 앱을 사용하여 C#고 Plinqo (전문 Linq 개체)로 내 ORM.여기에 내 상황:나는 DataGridview 에서 채워진 SortableBindingList<T> -나는 경우,형성된 List<Task> 는 단순히 표현되는 다음과 같다:

public class Task {
    public long TaskID { get; set; }
    public string TaskDescription { get; set; }
    public enumPriority TaskPriority { get; set; }
    public DateTime DueDate { get; set; }
    public double PercentageComplete { get; set; }
}  


지금,나는 제공하려면 대화를 나의 사용자를 허용하는 그/그녀의 이 목록을 필터링합니다.I envision 전달하는 목록에서 재산의 이름 및 관련 데이터 형식으로 대화할 수 있는 사용을 채우킬 수 있습니다.그래서 사용자 선택합성하고 싶은 쿼리 ko 과 선택에 따라 적절한 비교자 UI 제어 사용할 수 있는 사용자를 입력하에서 자신의 기준입니다.마지막으로,그것은 것을 포함 및/또는 토글 끝에는 사용자가 사용할 수 있습을 추가하는 추가적인 기준을 사용할 수 있습니다.각각의 기준이 될 것입니다 물체의 형식 FilterItem 다음과 같습니다:

public class FilterItem {
    public string MappedPropertyName { get; set; }
    public enumComparer Comparer { get; set; }
    public object FilterValue { get; set; }
    public enumOpertor Operator { get; set; }
}


사용자가 구문은 그/그녀의 쿼리가 전달하려고 한다 이로 List<FilterItem> 다시 제출 양식,수있는 반복을 통해 목록 허용하는 여과 원 List<Task>.

이것은 모든 벌금,그리고 무언가가는 내가 함께 넣을 수 있습니다.그러나 내가 있는지 확인하려면 실제 여과기 메커니즘을 가진 것으로 강력한 형식으로 가능하고,사용하지 않례 같은 문자열에서 쿼리에 라이브러리입니다.(내가 사용하는 비슷한 일을 이전으로 ADO.NET,Dataview 및 동적으로 생성한 문자열을 생성하는 경우)

I've read up 에서 조셉의 Albahari PredicatBuilder에 문서 tomasp.net, 지만,나는 것 같 크게 혼동 및 식 나무에서 일반적입니다.

저는 진심으로 추구에서 당신의 도움을 돕고 이해하는데 이러한 개념에 대해 이동하는 방법을 사용하도록 하는 내용물과 함께 작업 할 수 있습니다.

많은 감사!

도움이 되었습니까?

해결책

또한,내가 할 수 있는 다음과 같습니다.

private SortableBindingList<Task> GetSortedTaskList()
{
        List<Task> list = new List<Task>();
        var query = DataUtil.GetUserTasks(xSys.Current.UserID);
        if (/*description condition met*/)
        {
            query = query.Where(x => x.TaskDescription.Contains(FilterDesc));
        }
        if (/*due date condition met*/)
        {
            query = query.Where(x => x.DueDate >= FilterDate);
        }
        if (/*priority condition met*/)
        {
            query = query.Where(x => x.TaskPriority == FilterPriority);
        }

    ...

        list = query.ToList();
        return new SortableBindingList<ArcTask>(list);
}


그러나 이것을 보이지 않는 확장성이 매우고'dynamic'.

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