se本身也不是SQL的替代品。您可能希望在类似ORM的实体框架之上使用它。ORM的工作是将对象映射到表,而不是公开这些表。用干净的数据做这件事要容易得多在你的问题中有很多是不清楚的。SQL为什么不是100%正确?这是哪个数据库提供商?在写LINQ的过程中,
se本身也不是SQL的替代品。您可能希望在类似ORM的实体框架之上使用它。ORM的工作是将对象映射到表,而不是公开这些表。用干净的数据做这件事要容易得多在你的问题中有很多是不清楚的。SQL为什么不是100%正确?这是哪个数据库提供商?在写LINQ的过程中,,linq,linq-to-entities,Linq,Linq To Entities,se本身也不是SQL的替代品。您可能希望在类似ORM的实体框架之上使用它。ORM的工作是将对象映射到表,而不是公开这些表。用干净的数据做这件事要容易得多在你的问题中有很多是不清楚的。SQL为什么不是100%正确?这是哪个数据库提供商?在写LINQ的过程中,你在哪里?您是否已经使用实体框架将表映射到类模型?如果是,哪个版本?哪个数据库?我使用的数据库是SQLite。现在我正在SQLite中测试SQL查询,目的是将此SQL查询更改为LINQ查询。在viewmodel中,我从表中获取所有数据,因此现在
se本身也不是SQL的替代品。您可能希望在类似ORM的实体框架之上使用它。ORM的工作是将对象映射到表,而不是公开这些表。用干净的数据做这件事要容易得多在你的问题中有很多是不清楚的。SQL为什么不是100%正确?这是哪个数据库提供商?在写LINQ的过程中,你在哪里?您是否已经使用实体框架将表映射到类模型?如果是,哪个版本?哪个数据库?我使用的数据库是SQLite。现在我正在SQLite中测试SQL查询,目的是将此SQL查询更改为LINQ查询。在viewmodel中,我从表中获取所有数据,因此现在我只需要过滤数据/创建Linq查询。(我正在使用C#中的Xamarin Master detail)只需要(…)创建一个Linq查询。在编写第一个LINQ语句之前,您知道必须做出哪些选择吗?我们不能做出这些决定。您将linq标记为实体。这是一个很好的起点。
|Date|Count1|Count2|
|1977|1 |0 |
|1974|1 |0 |
|1972|1 |0 |
|1971|2 |0 |
|1999|0 |15 |
select Elhunyva, Osszes1 as `OsszesHalott`, Osszes2 as `OsszesSZ` from
(
(select substr(`Halott adatai`,0,instr(`Halott adatai`,'-')) as Elhunyva, Count(*) as Osszes1 from Holtak
group by substr(`Halott adatai`,0,instr(`Halott adatai`,'-'))) A left join
(select substr(`Halott adatai`,instr(`Halott adatai`, '-')+1) as Szuletve, Count(*) as Osszes2 from Holtak
group by substr(`Halott adatai`,instr(`Halott adatai`, '-')+1)) B on B.Szuletve=A.Elhunyva
)
union all
select Elhunyva, Osszes1 as `OsszesHalott`, Osszes2 as `OsszesSzületett` from
(
(select substr(`Halott adatai`,instr(`Halott adatai`, '-')+1) as Elhunyva, Count(*) as Osszes1 from Holtak
group by substr(`Halott adatai`,instr(`Halott adatai`, '-')+1)) A left join
(select substr(`Halott adatai`,0,instr(`Halott adatai`,'-')) as Szuletve, Count(*) as Osszes2 from Holtak
group by substr(`Halott adatai`,instr(`Halott adatai`, '-')+1)) B on B.Szuletve=A.Elhunyva
) GROUP BY ELHUNYVA ORDER BY ELHUNYVA
public class Row
{
public int ID;
public int SID;
public string LastCol;
}
public class ResultRow
{
public string Date;
public int Count1;
public int Count2;
}
#region Data preparing
string[] dtRanges =
{
"1977-1999",
"1974-1999",
"1972-1999",
"1971-1999",
"1971-1999",
"1961-1999",
"1960-1999",
"1957-1999",
"1953-1999",
"1950-1999",
"1950-1999",
"1946-1999",
"1943-1999",
"1940-1999",
"1939-1999",
"1920-1920" // To see what's going to happen whean date in both columns |1920|1|1|
};
List<Row> table = dtRanges
.Select(x => new Row { LastCol = x })
.ToList();
#endregion
var part1 = table.GroupBy(
key => key.LastCol.Split('-').First(),
val => val,
(key, val) => new ResultRow
{
Date = key,
Count1 = val.Count()
});
var part2 = table.GroupBy(
key => key.LastCol.Split('-').Last(),
val => val,
(key, val) => new ResultRow
{
Date = key,
Count2 = val.Count()
});
var result = part1
.Concat(part2)
.GroupBy(
key => key.Date,
val => val,
(key, val) => new ResultRow
{
Date = key,
Count1 = val.Sum(x => x.Count1),
Count2 = val.Sum(x => x.Count2),
}).ToList();