C# 关于查询Linq结果的问题
当您查询现有linq结果时,就好像它们比原始结果更深一层。让我解释一下我的意思 在下面的示例中,在获取ResultSorted后,要获取其中的数据,必须使用RowSorted.All.TableData.Field,但在未排序的结果中,可以只执行Row.TableData.Field。在已排序的数据中,您必须使用.All来访问其余的数据,这就像一个额外的层来访问您要查找的数据 我怎样才能得到它,这样我就可以查询结果而不需要得到这个额外的层?谢谢Stack-OC# 关于查询Linq结果的问题,c#,linq,C#,Linq,当您查询现有linq结果时,就好像它们比原始结果更深一层。让我解释一下我的意思 在下面的示例中,在获取ResultSorted后,要获取其中的数据,必须使用RowSorted.All.TableData.Field,但在未排序的结果中,可以只执行Row.TableData.Field。在已排序的数据中,您必须使用.All来访问其余的数据,这就像一个额外的层来访问您要查找的数据 我怎样才能得到它,这样我就可以查询结果而不需要得到这个额外的层?谢谢Stack-O var Result = from
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());
}
你可以用
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;}
}
class Tmp2
{
Tmp1 All {get; set;}
}
及
使用名为TableData的字段创建一个新的匿名类型,如下所示
class Tmp1
{
TableType TableData {get; set;}
}
class Tmp2
{
Tmp1 All {get; set;}
}
编辑2:如果直接
选择一个
,则不创建额外的匿名类型,而是返回表类型
var ResultSorted =
from a in Db.Table
orderby a.Field
select a.ToString();
编辑:已修复,未看到第一个查询。现在应该是一样的了。无需始终创建匿名对象。您在每个LINQ查询中都返回一个匿名类型的新实例:
select new {TableData = a};
select new {All = a};
您对编译器说的是(在第一个LINQ查询中),“给我一个异常类型的新实例。我希望此匿名类型有一个名为TableData
的属性,并且我希望该属性的值为a
”
如果只返回a
而不是异常类型,则不需要遍历嵌套类型的属性来获取数据。试试这个:
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());
}