0

親と子の2つのテーブルがあります。両方のテーブルには、Sql Server で DateTime として宣言された主キー "MyDate" があります。両方のテーブルには、MyDate が「2011-12-01 00:00:00.000」、つまり 2011 年 12 月 1 日に設定されたレコードがあります。

私の Linq to SQL dbml (.Net 3.5) では、MyDate プロパティで、2 つのテーブル間に自動的に作成された関連付けがあります。DataContext は、SQL Server (2008) で既定の言語が「英国英語」に設定されているデータベースへのログインを使用します。Linq クエリを実行すると:

var query
  from parent in myDataContext.PARENTs
  select parent

親レコードは返されますが、リンクされた子レコードは返されません。

SQL Profiler には、次のトレースがあります。

-- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language British
set dateformat dmy
set datefirst 1
set transaction isolation level read committed
exec sp_executesql N'SELECT [t0].[MyDate] FROM [dbo].[CHILD] AS [t0]
WHERE ([t0].[MYDATE] = @p0)','@p0 datetime',@p0='2011-12-01 00:00:00'

これは 0 レコードを返します。同じ(英国の)ログインを使用して、クエリウィンドウで直接実行して確認しました。「set dateformat dmy」をコメントアウトすると、まだ 0 レコードが取得されます。イギリス人以外のログインを使用して実行すると、レコードが返されます。日付として '01-12-2011 00:00:00' を使用し (たとえば、英国の日付形式)、英国のログインを使用すると、レコードが返されます。

クエリで使用する日付文字列を作成するときに、Linq が正しい日付形式を使用していないように思えます。「set dateformat dmy」を使用しているため、生成する日付文字列でその形式を使用しないのはなぜですか?

これを修正する比較的簡単な方法はありますか?ありがとう。

編集: 私のモデルでは、親と子の両方の MyDate プロパティには、「DateTime NOT NULL」のサーバー データ タイプと「DateTime (System.DateTime)」のタイプがあります。

4

1 に答える 1

0

熱心な読み込みを試す

LINQ to SQL: 遅延ロードとイーガー ロードの問題

var query = (from parent in MyDataContext.Parents select parent)
                .Including(childs => parent.Childs);

また

試してみる

from parent in Parents select new
     {parent.Name, parent.Whatever,
     Childs =
         parent.Childs.where(c=>c.Date== parent.Date) };
于 2012-05-23T10:45:17.010 に答える