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 };
使用 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 };