关于查询Linq结果的问题

时间:2010-10-13 19:56:17

标签: c# linq

当您查询现有的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());
}

3 个答案:

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