C# 使用英国数据库登录在DateTime属性上的Linq到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查询时: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查询时:
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) };