C# 如何选择优先小时

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 我会把时间放在我的组合框里,这取

我正在使用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
我会把时间放在我的组合框里,这取决于电脑时间

当计算机小时数为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假设计算机时间是10小时。 然后:您的条件是:HourMin=10。 第一个条件将返回第1行和第2行。第二个将返回第2行。相交将只返回第二行,即12:00


如果要获取所有行,只需删除这些条件。

这里是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;}
}
结果