2016-04-12 4 views
1

私はC#MVC EFコードで働いている、次のように私は、LINQの式を持っているまず、:
Linq式の中でStringをTimeSpanに変換するにはどうすればいいですか?

var data = new SchedulerAjaxData(new GTOpel().mxes.Select(e => new 
    { 
     id = e.nkeyid, 
     text = e.texto, 
     start_date = e.data, 
     end_date = e.data 
    }) 
); 

私の問題は今ある:私は私がしたい日付を持ってDateTimeフィールド(データを)持っていますデフォルトの時刻(00:00:00.000)を使用します。
私はこのフィールドに書いたフォーマットは "YYYY-MM-dd HH:mm:ss.fff"のようなものです
私はDateTime/TimeSpanタイプではなく文字列であるTimeフィールド(hinicio)を持っています。 hinicioをデータに追加したい場合 - DBがStringに使用しているフォーマット( "HH:mm")なので、 "13:00"のようなhinicioに値の例を与えましょう。最後に

、これは私が取得したいのですが何である:「2016年1月1日13:00:00.000」

我々は日時と文字列の話をしているので、そこにあります上記のIQueryable式の中で両方の値をフォーマットする合理的な方法はありますか?
もしそうでなければ、Selectメソッドで使用する前に値をフォーマットする必要がありますか?

UPDATE/MORE DETAILS:それについて疑問に思うかもしれません人のために

、変数のID、テキスト、START_DATEとEND_DATEは、スケジューラライブラリーには必須ですので、私は、私がすでに持っているイベントを見ることができます。
このスケジューラは私が使用しているテンプレートであり、今は自分のDBで実装しようとしています。あなたはその後、dataに追加し、TimeSpanhinicio値を変換する必要があり、事前にhttp://docs.dhtmlx.com/scheduler/

おかげ&よろしく、
Granvic

+8

私のアドバイスは、データベースに文字列として時間を保存しないでください。それはDateTime/DateTimeoffsetタイプのためのものです。 – Shyju

+0

あなたの 'hinicio''文字列'はどのように見えますか?あなたは新しい 'DateTime'を作成し、あなたが持っている' Date'と組み合わせることができます。 – Ian

+1

追加をSQL Serverで実行するか、クライアント側で実行できますか?この件について既に議論されている質問もたくさんあります。検索を試みましたか? – CodeCaster

答えて

1

:で
詳細情報。あなたはDbFunctionsSqlFunctionsクラスを使用する必要がエンティティにのLINQでこれを行うには

hiniciohh:mmのように見える場合

クエリは次のようにする必要があります:

var data = new SchedulerAjaxData(new GTOpel().mxes.Select(e => new 
{ 
    ... 
    start_date = DbFunctions.AddMinutes(e.data, 
        DbFunctions.DiffMinutes(TimeSpan.Zero, 
              DbFunctions.CreateTime(SqlFunctions.DatePart("hh", e.hinicio), 
                    SqlFunctions.DatePart("mi", e.hinicio), 
                    0.0))) 
})); 
+1

'新しいGTOpel()。mxes'が' IQueryable 'を返すと仮定すると、Entity Frameworkは' TimeSpan.Parse() 'をストア式に変換できないという例外をスローします。 – CodeCaster

+0

これは私が探していたものです!これはすごくうまくいったので、今度はイベントを正しく設定できます!どうもありがとうございました。@ arturo-menchaca、あなたはこれが私にどれくらいの助けになるか想像できません! – Granvic

0

hinicioの時間のフォーマットが標準フォーマット(例えば、14時23または14:23)されている場合は、変換は簡単です:

start_date = e.data + DateTime.Parse(hinicio).TimeOfDay, 
+1

これはSQLに変換できないため、LINQ to EFでは動作しません。結果は最初に実現されなければならないでしょう(例えばToLinq()で)。そして、「Select」がそれらに適用されるかもしれません。 –

+0

'PM'は標準ではありません。英語以外のロケールでは動作しません* 。しかし、特定の文化を 'Parse'に渡すか、' ParseExact'を使ってどんな形式にもマッチさせるように、.NET解析のすべてを使うことができます –

関連する問題