IQueryable <! - ??? - >用于linq-to-sql产品类型

时间:2016-05-27 13:18:51

标签: c# linq linq-to-sql

使用linq-to-sql,有没有办法指定两个ORM实体的产品类型?像,

internal IQueryable<???> GetFooBarQuery(DataContext context)
{
    return
        from foo in foos
        join bar in bars on ...
        select new { foo, bar };
}

???是与进一步查询优化兼容的类型,new { foo, bar }替换为等效的???类型。

2 个答案:

答案 0 :(得分:2)

您不能直接返回匿名类型,因为类型仅在编译时定义。 您应该创建一个类来保存您的数据(DTO)。

internal class FooBarDto
{
    public Foo Foo { get; set; }
    public Bar Bar { get; set; }
}

internal IQueryable<FooBarDto> GetFooBarQuery(DataContext context)
{
    return
        from foo in foos
        join bar in bars on ...
        select new FooBarDto{ Foo = foo, Bar = bar };
}

答案 1 :(得分:2)

你可以尝试使用dynamic或object作为返回类型,但是我认为最好的解决方案是为返回类型创建一个新类,而不是动态创建返回对象只返回新创建的类型的新实例。

您可以将来自两个查询的数据合并到一个对象中,该对象可以包含两个公共属性,每个对象来自查询的返回类型

public class ExampleClass
{
      public foo myFooObject { get; set; }
      public bar myBarObject { get; set; }
}

select new ExampleClass { foo = something, bar = something };