我正在使用列表中的列表。这就是我目前的搜索方式:
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
的所有实例。我只想要一个包含Name
,Id
,Value
和Timestamp
的列表,但问题是我的上述尝试会为每个项目返回2个条目(1表示时间戳,1表示价值)。有没有办法用Linq做到这一点?最好使用查询语法! :)
答案 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 };