当您查询现有的linq结果时,就像它们比原始结果更深一层。让我解释一下我的意思。
在下面的示例中,获取ResultSorted后,要获取其中的数据,您必须使用RowSorted.All.TableData.Field,但在未排序的Result中,您可以只执行Row.TableData.Field。在排序数据中,您必须使用.All来获取其余数据,这就像是一个额外的层来获取您正在寻找的数据。
我怎样才能得到它以便我可以在不获得额外图层的情况下查询结果?谢谢Stack-O!
var Result =
from a in Db.Table
select new {TableData = a};
var ResultSorted =
from a in Result
orderby a.TableData.Field
select new {All = a};
foreach(var RowSorted in ResultSorted)
{
MessageBox.Show(RowSorted.All.TableData.ToString());
}
答案 0 :(得分:3)
您可以使用
var Result =
from a in Db.Table
select a;
var ResultSorted =
from a in Result
orderby a.Field
select a;
foreach(var RowSorted in ResultSorted)
{
MessageBox.Show(RowSorted.ToString());
}
修改强> 事情是那个
select new {TableData = a};
使用名为TableData的字段创建一个新的匿名类型,如此
class Tmp1
{
TableType TableData {get; set;}
}
和
select new {All = a};
使用名为TableData的字段创建一个新的匿名类型,如此
class Tmp2
{
Tmp1 All {get; set;}
}
编辑2:
如果您直接select a
,则不会创建额外的匿名类型,而是返回TableType
。
答案 1 :(得分:0)
var ResultSorted =
from a in Db.Table
orderby a.Field
select a.ToString();
编辑:已修复,未看到第一个查询。现在这应该是相同的。无需一直创建匿名对象。
答案 2 :(得分:0)
您将在每个LINQ查询中返回匿名类型的新实例:
select new {TableData = a};
select new {All = a};
你对编译器说的是(在第一个LINQ查询中),“给我一个anoymous类型的新实例。我希望这个匿名类型有一个名为TableData
的属性,我想要值该属性为a
。“
如果您只是返回a
而不是anoymous类型,则不需要浏览嵌套类型的属性来获取数据。试试这个:
var Result =
from a in Db.Table
select a;
var ResultSorted =
from a in Result
orderby a.TableData.Field
select a;
foreach(var RowSorted in ResultSorted)
{
MessageBox.Show(RowSorted.ToString());
}