0

我有两张表父母和孩子。这两个表都有一个主键“MyDate”,在 Sql Server 中声明为 DateTime。两个表都有一条记录,其中 MyDate 设置为“2011-12-01 00:00:00.000”,即 2011 年 12 月 1 日。

在我的 Linq to SQL dbml (.Net 3.5) 中,我在 MyDate 属性上自动创建了两个表之间的关联。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”,为什么它不在它生成的日期字符串中使用该格式?

有没有相对简单的方法来解决这个问题?谢谢。

编辑:在我的模型中,Parent 和 Child 上的 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 回答