【问题标题】:IQueryable<???> for linq-to-sql product typeIQueryable<???> 用于 linq-to-sql 产品类型
【发布时间】:2016-05-27 22:02:19
【问题描述】:

使用 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 } 被替换为等效但类型为??? 时。

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      public class ExampleClass
      {
            public foo myFooObject { get; set; }
            public bar myBarObject { get; set; }
      }
      
      select new ExampleClass { foo = something, bar = something };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-11
        • 1970-01-01
        • 1970-01-01
        • 2012-10-01
        相关资源
        最近更新 更多