Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于查询Linq结果的问题_C#_Linq - Fatal编程技术网

C# 关于查询Linq结果的问题

C# 关于查询Linq结果的问题,c#,linq,C#,Linq,当您查询现有linq结果时,就好像它们比原始结果更深一层。让我解释一下我的意思 在下面的示例中,在获取ResultSorted后,要获取其中的数据,必须使用RowSorted.All.TableData.Field,但在未排序的结果中,可以只执行Row.TableData.Field。在已排序的数据中,您必须使用.All来访问其余的数据,这就像一个额外的层来访问您要查找的数据 我怎样才能得到它,这样我就可以查询结果而不需要得到这个额外的层?谢谢Stack-O var Result = from

当您查询现有linq结果时,就好像它们比原始结果更深一层。让我解释一下我的意思

在下面的示例中,在获取ResultSorted后,要获取其中的数据,必须使用RowSorted.All.TableData.Field,但在未排序的结果中,可以只执行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());
}
你可以用

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());  
}