C# 如何选择优先小时
我正在使用C和SQLServer2008R2 我有这样的小时数据:C# 如何选择优先小时,c#,linq,sql-server-2008-r2,C#,Linq,Sql Server 2008 R2,我正在使用C和SQLServer2008R2 我有这样的小时数据: Client_ID TheHour HourMin HourMAx 53026 09:00 7 9 53026 12:00 10 12 53026 15:00 13 15 53026 18:00 16 19 我会把时间放在我的组合框里,这取
Client_ID TheHour HourMin HourMAx
53026 09:00 7 9
53026 12:00 10 12
53026 15:00 13 15
53026 18:00 16 19
我会把时间放在我的组合框里,这取决于电脑时间
当计算机小时数为10:00时,“我的组合框”的值:
12:00
15:00
18:00
09:00
我的linq是:
int The_Hour = DateTime.Now.Hour;
var query = from o in oEntite_T.LS_CLIENTHORRAIRE
where o.CLIENT_ID == CLIENT_ID &&
The_Hour >= o.HEURE_MIN && The_Hour <= o.HEURE_MAX
select o;
LesListe = query.ToList();
它只返回1个值,即12:00
这意味着我的组合框将根据计算机时间选择小时,但它允许用户选择另一个小时。因此,基本上,您不想筛选列表,而是想对其进行排序,对吗 首先,您要按排序 MaxHour是否已成为过去 然后 时间本身。 示例:假设是10:00:
Client_ID TheHour HourMin HourMax MaxHourIsInThePast
53026 09:00 7 9 x
53026 12:00 10 12
53026 15:00 13 15
53026 18:00 16 19
现在您返回一个列表,该列表首先按MaxHouris在过去排序,首先是不带x的,然后是带x的,然后按小时排序
实现只是一个练习。提示:您将需要LINQ order by关键字和类似于o.HourMax
如果要获取所有行,只需删除这些条件。这里是LINQPad中的一个工作示例,我还添加了一个标志来指示所选值:
void Main()
{
var LS_CLIENTHORRAIREs = new List<LS_CLIENTHORRAIRE>
{
new LS_CLIENTHORRAIRE{TheHour="09:00",HourMin=7,HourMAx=9},
new LS_CLIENTHORRAIRE{TheHour="12:00",HourMin=10,HourMAx=12},
new LS_CLIENTHORRAIRE{TheHour="15:00",HourMin=13,HourMAx=15},
new LS_CLIENTHORRAIRE{TheHour="18:00",HourMin=16,HourMAx=19}
};
LS_CLIENTHORRAIREs.Dump();
int The_Hour = 10;
var query = from o in LS_CLIENTHORRAIREs
select new {o.TheHour,o.HourMin,o.HourMAx,selected = The_Hour >= o.HourMin && The_Hour <= o.HourMAx}
;
query.OrderBy (q => q.HourMAx>The_Hour ? 0 : 1).ThenBy (q => q.HourMAx).Dump();
}
public class LS_CLIENTHORRAIRE
{
public string TheHour{get;set;}
public int HourMin{get;set;}
public int HourMAx{get;set;}
}
结果