동적 일반 메서드를 작성하려고했습니다. 고급 검색 메커니즘을 만들려면 다음을 수행하십시오. 나는 동적 LINQ동적 쿼리를 LINQ로 빌드
IQueryable<Table> query = ObjectContext.Table;
if (parameters != null && parameters.Count > 0)
{
foreach (KeyValuePair<string, dynamic> keyValuePair in parameters)
{
query = query.Where(keyValuePair.Key + " == @0", new object[] { keyValuePair.Value });
}
}
를 사용하지만이 일을 뭔가를 달성 할 수
, 나는 그래서 다른 방법 을 (함께 노력하고있어이
ClassTable.Parameters.Add("FKTable.Foo", foo);
ClassTable.Parameters.Add("Bar", bar);
과 같이 각 필드를로드 할 필요 이 코드가 작동합니다)
List<Table> lstTable = new List<Table>();
lstTable.AddRange(tableDAO.SelectWhere(
u => this.EntityValues.Foo == u.Foo && this.EntityValues.Bar == u.Bar
));
return lstTable;
지금, 내 문제는, 내가 더 같은 것을하고 싶었다 나는이
그런 짓을하고 싶지 않았다List<Table> lstTable = new List<Table>();
lstTable.AddRange(tableDAO.SelectWhere(
u => !string.IsNullOrEmpty(this.EntityValues.Foo) ? this.EntityValues.Foo == u.Foo : false
&&
this.EntityValues.Bar != 0 ? this.EntityValues.Bar == u.Bar : false
));
return lstTable;
(이 코드는 첫 번째 쿼리의 결과를 가져온다)
IQueryable<Data.Story> query = ctx.DataContext.Stories;
if (criteria.StoryId != null) // StoryId
query = query.Where(row => row.StoryId == criteria.StoryId);
if (criteria.CustomerId != null) // CustomerId
query = query.Where(row => row.Project.CustomerId == criteria.CustomerId);
if (criteria.SortBy != null) // SortBy
query = query.OrderBy(criteria.SortBy + " " + criteria.SortOrder.Value.ToStringForSql());
내 질문이 다소 혼란 스럽다는 것을 알고 있으며 수정 및 의견을 제공하여 수정하도록하겠습니다. 바로 알려주세요.
TL; 동적 쿼리를 만드는 데 도움이 필요합니다. 여기서는 검색에 사용되는 매개 변수 만 전달하면됩니다. 따라서 사용자에게 고급 검색 옵션을 만들 수 있습니다.
public static IQueryable<T> Where<T>(this IQueryable<T> source, string propertyOrFieldName, object value)
{
var param = Expression.Parameter(typeof(T), "x");
var prop = Expression.Property(param, name);
var @const = Expression.Constant(value, prop.Type);
var equals = Expression.Equal(prop, @const);
var lambda = Expression.Lambda(equals, param);
return source.Where(lambda);
}
foreach(var p in parameters)
{
query = query.Where(p.Key, p.Value);
}
이게 당신이 찾고 있는게 있나요? [동적 LINQ] (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx) 또는 [ Predicate Builder] (http://www.albahari.com/nutshell/predicatebuilder.aspx)? – jrummell
@jrummell 네, 두 주제에서 모두 독서를하고있었습니다. 감사합니다 +1 –