デフォルトのCONVERT
スタイルをオーバーライドすることはできますか?私は126LinqからSQLへのDatetime.ToString()のデフォルトの変換値をオーバーライド
は手順が再現するために、常にISO8601のスタイルを返すために、デフォルトCONVERT
機能をしたいと思います:
DROP TABLE DATES;
CREATE TABLE DATES
(
ID INT IDENTITY(1,1) PRIMARY KEY,
MYDATE DATETIME DEFAULT(GETUTCDATE())
);
INSERT INTO DATES DEFAULT VALUES;
INSERT INTO DATES DEFAULT VALUES;
INSERT INTO DATES DEFAULT VALUES;
INSERT INTO DATES DEFAULT VALUES;
SELECT CONVERT(NVARCHAR,MYDATE) AS CONVERTED,
CONVERT(NVARCHAR(4000),MYDATE,126) AS ISO,
MYDATE FROM DATES
WHERE MYDATE LIKE'Feb%'
出力:
CONVERTED ISO MYDATE --------------------------- ---------------------------- ----------------------- Feb 8 2011 12:17AM 2011-02-08T00:17:03.040 2011-02-08 00:17:03.040 Feb 8 2011 12:17AM 2011-02-08T00:17:03.040 2011-02-08 00:17:03.040 Feb 8 2011 12:17AM 2011-02-08T00:17:03.040 2011-02-08 00:17:03.040 Feb 8 2011 12:17AM 2011-02-08T00:17:03.040 2011-02-08 00:17:03.040
LINQのツーSQLは、ときCONVERT(NVARCHAR,@p)
を呼び出します私はToString()
を投げた。しかし、すべてのデータをISO8601形式で表示しています。可能であれば、データベースのデフォルト値をCONVERT(NVARCHAR,@p,126)
に上書きしたいと思います。
Dynamic Linq-to-SqlをデモしてScottGuでデータを処理しています。私は私の財産はCONVERT(NVARCHAR,@p)
からCONVERT(NVARCHAR,@p,126)
に式を変換します期待していた
PropertyInfo piField = typeof(T).GetProperty(rule.field);
if (piField != null)
{
Type typeField = piField.PropertyType;
if (typeField.IsGenericType && typeField.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
filter = filter
.Select(x => x)
.Where(string.Format("{0} != null", rule.field))
.Where(string.Format("{0}.Value.ToString().Contains(\"{1}\")", rule.field, rule.data));
}
else
{
filter = filter
.Select(x => x)
.Where(string.Format("{0} != null", rule.field))
.Where(string.Format("{0}.ToString().Contains(\"{1}\")", rule.field, rule.data));
}
}
は、しかし、私は暗闇の中で、おそらくショットNotSupportedException: ... has no supported translation to SQL.
public string IsoDate
{
get
{
if (SUBMIT_DATE.HasValue)
{
return SUBMIT_DATE.Value.ToString("o");
}
else
{
return string.Empty;
}
}
}
残念ながら。 linq-to-sql式を取得してISO 8601形式を生成するか、データベース側でCONVERTのデフォルトを設定する必要があります。 –