성 Linq 터 목록<T>
-
05-07-2019 - |
문제
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'.