我有一个linq查询,它生成一系列匿名类型。查询定义为:
var query = from a in Db.Table1
join b from Db.Table2
join...
...
select new {
a.field1, a.field2,
b.field1, NewName = b.field2 };
现在我想在以下场景中使用此查询:
if (x == 1)
{ query = ...
...rest of code_1 }
if (x == 2)
{ query = ...
...rest of code_2 }
'查询'从第一个'如果'将使用不同的表,连接和where语句,而不是来自第二个'如果'但两者将具有完全相同的“选择新的'言。
为了做到这一点,我需要声明一个变量'查询'如果'内部可见。语句。
当我选中'键入'查询'使用:
query.GetType().ToString();
它给了我:
query type = 'System.Data.Objects.ObjectQuery`1[<>f__AnonymousType7`14[System.Int32,System.String,System.String,System.String,System.Nullable`1[System.DateTime],System.Decimal,System.Nullable`1[System.DateTime],System.Decimal,System.String,System.String,System.String,System.String,System.String,System.String]]'
我无法声明一个单独的类,因为我只能在我编写代码的方法中编写。 我应该如何声明一个&#39;查询&#39;变量?
答案 0 :(得分:1)
我看到的唯一方法是使用示例来定义它:
var query = Enumerable.Repeat(new
{
field1 = default(int),
field2 = default(string),
field3 = default(string),
// other fields ...
}, 0).AsQueryable();
其中field1
,field2
等应该是具有实际类型的具体属性名称,按内部选择内部使用的确切顺序排列。
答案 1 :(得分:0)
作为此解决方案的延续,我想询问是否有可能使用动态&#39;其中&#39;声明。在搜索时,我被重定向几次到基于PredicateBuilder类的解决方案,但这需要一个方法语法而不是查询语法。我是否需要将我的查询转换为lambda,还是有另一种方法可以实现此目的?
我的额外&#39;其中&#39; (因为我已经有一些&#39; where&#39;条件)语句应该类似于:
where
( a.field1 = a[0] and b.field1 = b[0] ) ||
( a.field1 = a[1] and b.field2 = b[1] ) ||
( a.field1 = a[2] and b.field2 = b[2] ) ||
....
( a.field1 = a[a.Length] and b.field2 = b[b.Length] )