2017-07-28 6 views
0

私は午前7時から午後3時の間にレコードをフェッチします。同じのためにlinqクエリを書く方法?エンティティフレームワークの特定の時間の間にレコードを取得する方法

コード

var items = Pirs.Where(a => !a.dataFrame.EndsWith("AAAAAAAAAAA=") && (fromDate == null || fromDate.Value.Date <= TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(a.timestamp), TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")).Date) && (toDate == null || toDate.Value.Date >= TimeZoneInfo.ConvertTimeFromUtc(Convert.ToDateTime(a.timestamp), TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")).Date) && (a.timestamp.Hour > 7 || a.timestamp.Hour < 15)) 
       .GroupBy(a => a.dataFrame.Substring(a.dataFrame.Length - 12)) 
       .Select(g => g.First()).OrderBy(a => a.timestamp); 

サンプルデータ

timestamp "2017-07-21T14:06:02.203Z" 

答えて

1

あなたの質問が書かれている方法、あなたが求めている正確に理解することは困難であるので、私はあなたを達成するための一般的な方法を提供しますあなたは何を望んでいると思いますか?

はあなたがクラス、Foo持って言う:

List<Foo>考える
class Foo 
{ 
    public DateTime date { get; set; } 
} 

を、あなたはdate財産だそのリストにFooのすべてのインスタンスを取得することができますので、のような特定の時間の間である:

var myList = new List<Foo>(); 
int startHour = 7; // 7am 
int endHour = 15; // 3pm 
var result = myList.Where(item => item.date.Hour >= startHour && item.date.Hour <= endHour); 

result列挙型には、myListのすべてのアイテムが含まれています。dateプロパティのHourフィールドがベットされていますween startHourおよびendHourを含む。あなたは、この第二の溶液を照会するとき以来、と互換性がないEntity Frameworkのを、使用していた言及した、しかし

public static bool Between(DateTime input, int x, int y) 
{ 
    return (input.Hour => x && input.Hour <= y); 
} 

var result = myList.Where(item => item.date.Between(7, 15)); 

何かがあなたが大幅にこれを簡素化するために拡張メソッドを使用することができ、注意しますa DbSet、その操作はプログラムでは実行されませんが、EFによってSQLに変換され、代わりにDBプロバイダによって実行されます。あなたのクエリで拡張メソッドを使うと、まずすべてをメモリにロードする必要がありますが、これはお勧めしません。

関連する問題