C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: LINQ to SQL での表現方法


(過去ログ 95 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■56478 / inTopicNo.1)  LINQ to SQL での表現方法
  
□投稿者/ ジャンジャン (1回)-(2011/01/14(Fri) 20:19:07)

分類:[.NET 全般] 

いつもお世話になっております。

環境はSqlServer2008,VisualStudio2008です。

次の内容をLINQ to SQLでどのように表現すれば取得出来るか分からず困っています。




テーブルTable1に、列名Datetime2_a,Datetime2_b でデータが格納されている。

(二つの日付の差分の平均を取得するSQL文)

SELECT AVG( DATEDIFF (MILLISECOND,Datetime2_a,DateTime2_b)) FROM Table1

※Linq to SQLによる、シンプルなデータの取得、挿入、変更は理解しています。
※MILLISECONDの部分はSECONDでも構いません(MILLISECONDが出来ない模様)
引用返信 編集キー/
■56485 / inTopicNo.2)  Re[1]: LINQ to SQL での表現方法
□投稿者/ やじゅ (1818回)-(2011/01/14(Fri) 23:55:59)
やじゅ さんの Web サイト
2011/01/16(Sun) 19:52:23 編集(投稿者)
No56478 (ジャンジャン さん) に返信
> SELECT AVG( DATEDIFF (MILLISECOND,Datetime2_a,DateTime2_b)) FROM Table1

動作未確認、あとで検証します。とりあえず…
using System.Data.Linq.SqlClient;
var query = (from d in db.table1
             select new
             {
               diff = SqlMethods.DateDiffSecond(d.date_a, d.date_b)
            }).Average(i => i.diff)
実行するとエラーがでるなー、むー。

追記:2011/01/16 上記で出来ることを確認しました。

引用返信 編集キー/
■56491 / inTopicNo.3)  Re[2]: LINQ to SQL での表現方法
□投稿者/ かたぎり (47回)-(2011/01/15(Sat) 10:19:32)
2011/01/15(Sat) 10:42:10 編集(投稿者)
2011/01/15(Sat) 10:38:04 編集(投稿者)

サンプルコードいれたけど、VBとC#で話は別。
どちらなのかしら?

参考になる情報は、

VBは
http://msdn.microsoft.com/ja-jp/library/bb918069.aspx

C#は
http://msdn.microsoft.com/ja-jp/library/bb397900.aspx


引用返信 編集キー/
■56493 / inTopicNo.4)  Re[2]: LINQ to SQL での表現方法
□投稿者/ 渋木宏明 (53回)-(2011/01/15(Sat) 11:43:01)
渋木宏明 さんの Web サイト
> 実行するとエラーがでるなー、むー。

うちでは特に問題なく計算出来てるみたい。

static void Main(string[] args)
{
  using (var db = new DataClasses1DataContext())
  {
    var result = db.Table1.Average(_ => SqlMethods.DateDiffMillisecond(_.DateTime2_a, _.DateTime2_b));

    Console.Out.WriteLine(result);
  }
}

引用返信 編集キー/
■56496 / inTopicNo.5)  Re[3]: LINQ to SQL での表現方法
□投稿者/ ジャンジャン (2回)-(2011/01/15(Sat) 15:40:41)
解決いたしました。使用言語はVBです。

使うべきDateDiffを使えていなかったのが原因のようです。
System.Data.Linq.SqlClient.SqlMethods.DateDiffMillisecondを使用しました。

以下、コード

Public Sub test()

Using db As New DataClassesDataContext

Dim dateDiffAverage = Aggregate datediff In _
(From table1 In db.Table1 _
Select SqlMethods.DateDiffMillisecond(table1.Datatime2_a, table1.Datatime2_b)) _
Into Average(datediff)

Console.WriteLine(dateDiffAverage)

End Using

End Sub
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -