当您查询现有的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());
}发布于 2010-10-14 04:00:43
您可以使用
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。
发布于 2010-10-14 04:01:13
var ResultSorted = 
   from a in Db.Table
   orderby a.Field
   select a.ToString();编辑:已修复,未看到第一个查询。现在这应该是相同的。没有必要一直创建匿名对象。
发布于 2010-10-14 04:02:47
您将在每个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());  
}  https://stackoverflow.com/questions/3927496
复制相似问题