AsEnumerable and Query Syntax

本文关键字:Syntax Query and AsEnumerable | 更新日期: 2023-09-27 18:23:58

我有一个使用查询语法编写的相当复杂的Linq表达式。简化后,它看起来像:

var query = 
    from a in ctx.A
    from b in ctx.B
    where a.Bid == b.Id
    select new MyType()
    {
        Foo = a.Foo,
        Bar = b.Bar
    }

我必须修改查询以在MyType的新实例上设置一个属性,这种方式无法由查询提供程序进行评估。结果集相当小,所以使用.AsEnumerable()是合理的。我在MSDN上找到了一个例子,展示了如何在一个简单的案例中做到这一点

IEnumerable<DataRow> query =
    from product in products.AsEnumerable()
    select product;

在更复杂的情况下,如何使用AsEnumerable()?也就是说,我如何实现这样的目标

var query = 
    from a in ctx.A
    from b in ctx.B
    where a.Bid == b.Id
    AsEnumerableGoesHereSomehow
    select new MyType()
    {
        Foo = a.SomeClientSideCalculation(),
        Bar = b.Bar
    }

我不想在客户端执行联接和筛选。

AsEnumerable and Query Syntax

可以将{a=a,b=b}简化为您实际需要的属性,但您可以将其作为一个开始:

var query =( 
    from a in ctx.A
    from b in ctx.B
    where a.Bid == b.Id
    select new 
    {
        a = a,
        b = b
    })
    .AsEnumerable()
    .Select(x=>new MyType {
      Foo=Something(x.a),
      Bar=x.b
    });