Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用英国数据库登录在DateTime属性上的Linq到Sql表关联_C#_Sql Server_Linq To Sql - Fatal编程技术网

C# 使用英国数据库登录在DateTime属性上的Linq到Sql表关联

C# 使用英国数据库登录在DateTime属性上的Linq到Sql表关联,c#,sql-server,linq-to-sql,C#,Sql Server,Linq To Sql,我有两张父母和孩子的桌子。这两个表都有一个主键“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)中的默认语言设置为“British English”。运行Linq查询时:

我有两张父母和孩子的桌子。这两个表都有一个主键“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)中的默认语言设置为“British English”。运行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)”。

请尝试加载

试用

from parent in Parents select new
     {parent.Name, parent.Whatever,
     Childs =
         parent.Childs.where(c=>c.Date== parent.Date) };

#在您的LINQ模型中,是
DateTime
?还是某种绳子?同样,在C生成的代码中。基本上,它不应该以字符串形式传递日期。如果你这么做,你就做错了。它应该始终是一个类型化参数,因此区域性是无关的。我怀疑您看到的
@p0
的值仅仅是一种表示,发送的值实际上是一个二进制浮点,在每个区域性中都是相同的日期。是的,在我的模型中是DateTime。我没有可用的包含;根据你的链接,它是被微软杀死的-(我想避免您的第二个建议,因为似乎我必须命名父表中的所有列(有很多!)。无论如何,谢谢。
from parent in Parents select new
     {parent.Name, parent.Whatever,
     Childs =
         parent.Childs.where(c=>c.Date== parent.Date) };