从记录中查找最短时间并在LINQ中拆分
我们有一个游泳运动员的时间数据库。 为了创建排名,我们希望每个运动员都能以最快的速度完成比赛从记录中查找最短时间并在LINQ中拆分,linq,min,Linq,Min,我们有一个游泳运动员的时间数据库。 为了创建排名,我们希望每个运动员都能以最快的速度完成比赛 var rankings = ( from r in _db.Results orderby r.swimtime group r by r.athleteid into rg select new { AthleteId = rg.Key, FirstName
var rankings = (
from r in _db.Results
orderby r.swimtime
group r by r.athleteid into rg
select new
{
AthleteId = rg.Key,
FirstName = rg.Min(f2 => f2.Athlete.firstname),
Swimtime = rg.Min(f8 => f8.swimtime),
hours = rg.Min(f9 => f9.swimtime.Hours),
minutes = rg.Min(f10 => ("00" + f10.swimtime.Minutes.ToString()).Substring(("00" + f10.swimtime.Minutes.ToString()).Length - 2)), // to get 2 digits in minutes
seconds = rg.Min(f11 => ("00" + f11.swimtime.Seconds.ToString()).Substring(("00" + f11.swimtime.Seconds.ToString()).Length - 2)), // to get 2 digits in seconds
milliseconds = rg.Min(f12 => (f12.swimtime.Milliseconds.ToString() + "00").Substring(0, 2)), // because miliseconds are not always filled
}
);
现在排名创建正确,但显示的时间不正确。我知道问题是什么,但不知道如何解决: 在数据库中,我们有一个游泳者有两个时间:00:01:02:10(1min2sec10)和00:00:56:95(56sec95) 我们得到的结果是分钟(=00)、秒(=02)和毫秒(=10)的最小值
导致时间为00:00:02:10 我们应该得到最快时间的小时、分、秒和毫秒(=00:00:56:95)
有人知道如何解决这个问题吗?这应该可以做到:
from result in db.Results
group result by result.AthleteId into g
let bestResult = (
from athleteResult in g
orderby athleteResult.SwimTime
select athleteResult).First()
orderby bestResult.SwimTime
select new
{
AthleteId = bestResult.Athlete.Id,
FirstName = bestResult.Athlete.FirstName,
BestTime = bestResult.SwimTime,
}
查询从一个组中获取最佳结果(所有结果都来自一个删除),按该结果排序,并使用该结果填充最终结果。远离调用。首先是组,因为由于LINQ的组(键和元素)与SQL的组(键和聚合)之间的差异,这可能会导致自动重新查询 相反,只需要一次时间就可以了
var rankings =
from r in _db.Results
group r by r.athleteid into rg
let minSwimTime = rg.Min(x => x.swimtime)
select new
{
AthleteId = rg.Key,
FirstName = rg.Min(f2 => f2.Athlete.firstname),
Swimtime = minSwimTime,
hours = minSwimTime.Hours,
minutes = ("00" + minSwimTime.Minutes.ToString()).Substring(("00" + minSwimTime.Minutes.ToString()).Length - 2), // to get 2 digits in minutes
seconds = ("00" + minSwimTime.Seconds.ToString()).Substring(("00" + minSwimTime.Seconds.ToString()).Length - 2), // to get 2 digits in seconds
milliseconds = minSwimTime.Milliseconds.ToString() + "00").Substring(0, 2), // because miliseconds are not always filled
};
另外-不要在数据库中设置字符串格式。数据库服务器有比将日期时间转换为文本更好的事情要做。尝试了这一点,我在页面中获得了swimtime。然而,经过两个小时的搜索和尝试,我仍然没有得到我想要的格式。我想得到hh:mm:ss.00。有什么想法吗?看看如何将这个时间跨度转换成日期时间,然后格式化它。大多数解决方案都是这样做的:public DateTime GetDateTimeFromTimeSpan(TimeSpan TimeSpan){return DateTime.Now.Subtract(TimeSpan);}这仍然给我留下了aspx:格式化时间不是LINQ特有的问题。请尝试在此处开始一个新问题,以便对其进行格式化。此时最好不要让数据库格式化。做一个
排名。取(100).ToArray()
以确保您使用LINQ to对象。好的,所以我使用您的“let”并将选择调整为。。。。啊。。。。我如何在前端格式化它?