我有一个表'a',带有id和timestamp。另一个表'b'有N个多行引用id,每行有'type'和“some some data”。
我想要LINQ查询来生成带有id,时间戳和“其他一些数据”x N的单行。像这样:
1 | 4671 | 46.5 | 56.5
其中46.5来自'b'的一行,而56.5来自另一行;两者都有相同的身份。
我在SQLite中有一个有效的查询,但我是LINQ的新手。我不知道从哪里开始 - 我认为这根本不是一个加入。
SELECT
a.id as id,
a.seconds,
COALESCE(
(SELECT b.some_data FROM
b WHERE
b.id=a.id AND b.type=1), '') AS 'data_one',
COALESCE(
(SELECT b.some_data FROM
b WHERE
b.id=a.id AND b.type=2), '') AS 'data_two'
FROM a first
WHERE first.id=1
GROUP BY first.ID
答案 0 :(得分:2)
你没有提到你是否使用Linq来实现sql或linq。但是下面的查询应该到那里
(from x in a
join y in b on x.id equals y.id
select new{x.id, x.seconds, y.some_data, y.type}).GroupBy(x=>new{x.id,x.seconds}).
Select(x=>new{
id = x.key.id,
seconds = x.Key.seconds,
data_one = x.Where(z=>z.type == 1).Select(g=>g.some_data).FirstOrDefault(),
data_two = x.Where(z=>z.type == 2).Select(g=>g.some_data).FirstOrDefault()
});
显然,您必须使用datacontext或Objectcontext为表名添加前缀,具体取决于底层提供程序。
答案 1 :(得分:0)
您想要做的与旋转相似,请参阅Is it possible to Pivot data using LINQ?。这里的区别在于您不需要聚合(如标准数据透视图),因此您需要使用Max或某些类似的方法来模拟选择单个varchar字段。