Linq合并结果

时间:2011-01-03 07:05:11

标签: c# linq .net-3.5

我正在使用列表中的列表。这就是我目前的搜索方式:

var tags = from fd in BigList
           from tag in fd.Tags
           where tag.Id == selectedTag.Id ||
                 tag.Id == ID.TIMESTAMP
           select new { fd.Name, tag.Id, tag.Value };

然后我遍历结果集并记住Timestamp何时弹出下一个条目,不用说这是马虎而且我很肯定有一个更好的方法使用Linq,我似乎无法找到语法

以下是一些示例输出(Id表示存储在内部的数据类型,例如时间戳):

Name | Id | Value
-----|----|----------
0000 | 1  | <timestamp>
0000 | 2  | 1.2
...
9999 | 1  | <timestamp>
9999 | 2  | 6.3

我需要Id = selectedTag.Id的所有实例。我只想要一个包含NameIdValueTimestamp的列表,但问题是我的上述尝试会为每个项目返回2个条目(1表示时间戳,1表示价值)。有没有办法用Linq做到这一点?最好使用查询语法! :)

1 个答案:

答案 0 :(得分:2)

以下是将其作为单个查询执行的方法:

var tags = from fd in BigList
           from tag in fd.Tags
           where tag.Id == selectedTag.Id
           from tag2 in fd.Tags
           where tag.Id == ID.TIMESTAMP
           select new { fd.Name, id = tag.Value, timestamp = tag2.Value };

这是通过加入两个查询来实现的:

var tags = from fd in BigList
           from tag in fd.Tags
           where tag.Id == selectedTag.Id
           select new { fd.Name, id = tag.Value };
var tag2 = from fd in BigList
           from tag2 in fd.Tags
           where tag.Id == ID.TIMESTAMP
           select new { fd.Name, timestamp = tag2.Value };
var data = from id in tags
           join ts in tag2 on id.Name equals ts.Name
           select new { id.Name, id.id, ts.timestamp };