English 中文(简体)
动态准则 询问
原标题:Dynamic LINQ Queries

Is it possible to create Linq Queries at runtime. Using an xml rule which can be translated to a Linq Query.

最佳回答

归根到底,是的;但是,这并不简单,你需要:

  • learn the Expression API
  • use the pre-rolled dynamic LINQ library (from the samples download)

如果你想选择第一种办法,那么你就需要创建自己的lam;例如,想象你们有这样的东西(在这里做事情......):

<Filters>
    <Add Prop="Foo">My filter value</Add>
</Filters>

然后,你们需要做这样的事情:

XElement filters = ...; // the "Filters" element
IQueryable<Customer> query = ...; // your raw (unfiltered) query
foreach(var filter in filters.Elements("Add")) {
    var param = Expression.Parameter(typeof(Customer), "row");
    var body = Expression.Equal(
        Expression.PropertyOrField(param, (string)filter.Attribute("Prop")),
        Expression.Constant(filter.Value, typeof(string)));
    query = query.Where(Expression.Lambda<Func<Customer, bool>>(
        body, param));
}

以上(每个“Add”要素)都产生了一个将特定成员过滤到供应价值(假设体内,但你当然可以做任何转换等)。 所有其他行动都是有益的,但效果不大。 注:query通过该休息室受到限制。

问题回答

是的。 我不想告诉你如何教化XML,但你可以照此附上林克推广方法:

var IQueryable<bla> query = myDataContext.BlahTable;  // I think you can also use IEnumerable.

if(/* something */)
{
    query = query.Where(b => b.Field1 > 0);
}

if(/* something else */)
{
    query = query.OrderBy(b => b.Field2);
}

基本上,你们需要建设一种表达的树木。 在此作简要解释,以回答另一个问题:,从XML上 trees树。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签