【发布时间】:2016-08-07 16:09:35
【问题描述】:
我有一个生成一系列匿名类型的 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 }
第一个“if”中的“查询”将使用与第二个“if”中的查询不同的表、连接和 where 语句,但是两者将具有完全相同的“select new”语句。
为此,我需要声明一个变量“查询”,该变量将在“if”语句中可见。
当我使用以下方法检查“查询”的“类型”时:
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]]'
我不能声明一个单独的类,因为我只能在我正在编写代码的方法中编写代码。 我应该如何声明一个“查询”变量?
【问题讨论】:
-
您可以使用非泛型
IQeuryable或dynamic。 -
为自己制造麻烦似乎很麻烦。
-
有了 IQueryable 我以后将无法使用,即 if (query.Count() > 0) - 对吗?
标签: c# linq variables anonymous-types declare