我編碼從表情自定義查詢構建器,並在某些時候我是一個表達式的值保存到我的標準類:從表達式的值轉換爲另一種類型的C#
switch(expression.NodeType)
{
case ExpressionType.Constant:
{
//Here there should only be raw values
CriteriaClass newCriteria = new CriteriaClass();
newCriteria.Value = expression; //Value is of 'object' type
return newCriteria;
}
}
而且當我實際設置查詢時,我有一個所有標準和它們的值的列表,這看起來很好,但是......他們的類型都搞砸了。 的問題是,我的下一個步驟是正確的值的類型轉換爲特定的數據庫格式:
private string FormatWriteValue(object value, Type type)
{
if (value == null) { return "NULL"; }
if (value.GetType().IsEnum) { return ((int)value).ToString(); }
switch(type.Name)
{
case "Boolean":
case "bool":
return ((bool)value) ? "1" : "0";
case "Int32":
case "int":
return value.ToString();
case "DateTime":
return "CONVERT(DATETIME, '" + ((DateTime)value).ToString("dd/MM/yyyy hh:mm:ss") + "', 103)";
default:
return "'" + value.ToString().Replace("'", "''") + "'";
}
}
由於類型是從來沒有基本的人我已經輸入有一個,它總是落在默認案件的字符串。 我已經試過鑄造這樣的表達式的值:
criteria.Value = (int)expression; //exception
criteria.Value = Convert.ChangeType(expression, expression.Type); //Type = Int32, but exception again
criteria.Value = Expression.Convert(expression, expression.Type); //Becomes Unary, no exception
我覺得最後一個工作,我不得不編譯表達式,但我讀過,這是昂貴的,我會希望保持儘可能輕。
我該如何做到這一點?
我不認爲我完全理解你在問什麼,但你有沒有嘗試過Type.GetType()? – 2014-10-19 01:12:00
@AnthonyRussell是的,我得到的類型是正確的(例如'Int32'),但由於它是Linq.Expression,因此無法將其轉換。所以我保存了一個變量「{1}」,但它不是一個INT,它就是這個'Linq.Expression'類型,我不能從它轉換出來。 – Danicco 2014-10-19 01:21:46