我正在关注Scott Gu的文章,以创建一个动态的LINQ http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library的.aspx
他举了一个例子:
Expression<Func<Customer, bool>> e1 =
DynamicExpression.ParseLambda<Customer, bool>("City = \"London\"");
Expression<Func<Customer, bool>> e2 =
DynamicExpression.ParseLambda<Customer, bool>("Orders.Count >= 10");
IQueryable<Customer> query =
db.Customers.Where("@0(it) and @1(it)", e1, e2);
Run Code Online (Sandbox Code Playgroud)
这在我的情况下工作正常.但是,我有未知数量的where子句,这是在运行时决定的.
任何人都可以告诉我如何创建一个通用的Where子句,例如
Where("@0(it) and @1(it) and... @n(it)", e1, e2, ... en);
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一组List<>需要排序的字典值 (a )。基本上每个字典都是一个“行”,集合是一页行。一个简单的例子;
var data = new List<Dictionary<string,string>>();
data.Add(new Dictionary<string,string>() {
{ "Firstname", "Bob"},
{ "Lastname", "Banana"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Amy"},
{ "Lastname", "Apple"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Charlie"},
{ "Lastname", "Coconut"}
});
data.Add(new Dictionary<string, string>() {
{ "Firstname", "Andy"},
{ "Lastname", "Apple"}
});
Run Code Online (Sandbox Code Playgroud)
生成的排序字符串是“SQL”之类的,例如
Lastname asc, Firstname desc
Run Code Online (Sandbox Code Playgroud)
我已经尝试.OrderBy()过数据对象,但这似乎不适用于 KeyValuePairs。
知道如何使用动态排序语句按此顺序对数据列表进行排序:
Apple, Andy
Apple, Amy
Banana, Bob
Coconut, Charlie
Run Code Online (Sandbox Code Playgroud)
如果一些花哨的 LINQ 可以工作,则使用 .NET 4.0。感谢您的任何建议。
我尝试创建通用方法来过滤数据库中的不同实体,以避免为每个实体创建庞大的方法,并使用非常相似的 if 语句组合过滤规则。
现在我正在尝试创建表示相等比较的表达式,作为描述要比较的属性和某个值的参数表达式。
我的概念如何解决问题以及我根据其他帖子创建的内容显示了以下代码片段:
public class FuelCard
{
public int Id { get; set; }
public string Number { get; set; }
public virtual User User { get; set; }
}
public static IQueryable<TEntity> ApplyFilter<TEntity, TProperty>(
this IQueryable<TEntity> query,
Expression<Func<TEntity, TProperty>> expr, TProperty value)
{
Expression<Func<TEntity, bool>> predicate = param => true;
var filterExpression = Expression.Equal(expr, Expression.Constant(value));
var lambda = Expression.Lambda<Func<TEntity, bool>>(filterExpression);
predicate = predicate.And(lambda);
return query.Where(predicate);
}
Run Code Online (Sandbox Code Playgroud)
最后我想这样使用它:
IQueryable<FuelCard> query = // Get cards from database as IQueryable …Run Code Online (Sandbox Code Playgroud)