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

IQueryable<???> for linq-to-sql product type

使用 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 } 被替换为等效的东西,但类型为 ???.

您不能直接返回匿名类型,因为该类型仅在编译时定义。 您应该创建一个 class 来保存您的数据 (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 };
}

您可以尝试将 dynamic 或 object 作为 return 类型,但我认为最好的解决方案是为 return 类型创建一个新的 class 而不是创建return 对象动态简单地 return 您新创建的类型的新实例。

您可以将来自两个查询的数据合并到一个对象中,该对象可以包含两个 public 属性,每个属性来自您的查询return

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

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