首先让我给你一些背景信息。
我有一些看起来像这样的数据:
含义:跑步者每个日期的总时间和圈数不同。
这是我如何创建SQL数据库的模型:
(抱歉是ASCII艺术,但这是我的第一个问题)
|Runner | |RunnerTimes | |Time |
|RunnerID|-----|RunnerTimesID |----|TimeID |
|RunnerID | |Laps |
|TimeID | |Duration|
|Date |
我的问题是我有一些在数据库之前创建的代码:
public class iRunner
{
public int[] laps;
public TimeSpan[] duration;
}
public static class RunnerFunctions
{
public static double AverageLaps(iRunner runner)
{
return runner.laps.Average();
}
}
所以我可以使用以下方式获取所有跑步者数据:
Runner runner = dbContext.Runner.Where(item=>item.RunnerID == 1);
然后我必须“转换”为类格式:
iRunner r = new iRunner();
r.Laps = runner.RunnerTimes.Select(a=>a.Laps).toArray();
r.Duration = runner.RunnerTimes.Select(a=>a.Duration).toArray();
然后我实际上可以调用预先存在的方法:
Double average = RunnerFunctions.Average(runner);
现在你有了背景,这是我的问题:
一些额外数据:
谢谢!
答案 0 :(得分:0)
如果代码首先存在,您可以考虑将Code First方法与Entity Framework一起使用。
答案 1 :(得分:0)
您的架构设计与我使用的架构很接近:
Runner
========
id -- autoincrement
Run
==========
runnerId -- fk to Runner.id
startedAt -- timestamp
laps -- int count
duration -- int duration in milliseconds/seconds
-- (unless your RDBMS has a 'duration' type).
RunnerTimes
目前似乎没有那么有用,除非您最终向我们提供更多“真实世界”的信息。
特别是运行次数如此多变,这就是我的建议。
就个人而言,我发现预先存在的代码有点怀疑(它真的有这样的公共数据成员吗?)。另外,为什么你不能做普通的数据库端(直接,或者如果Linq-to-SQL支持它,那么)?检索的500毫秒和转换的4分钟听起来可笑得多;每个跑步者有多少行?你有必要的指数吗?并且对相关框架知之甚少,但我怀疑runner.RunnerTimes.Select(...)
正在做的工作比它应该做的更多。