![](/img/trans.png)
[英]Unable to cast the type 'System.String' to type 'System.Object'. LINQ to Entities only supports casting Entity Data Model primitive types
[英]WorkflowInvoker.Invoke - Literal only supports value types and the immutable type System.String
由于存在类似的问题,我的问题可能被解释为重复的: Workflow Foundation-文字仅支持值类型和不可变类型System.String,但实际上,我已经尝试了上述解决方案(以及许多其他尝试,找到),仍然无法解决问题。
在工作流控制台应用程序中,我想将数据表发送到我自己的CodeActivity中,然后将其返回给Main。
namespace WorkflowConsolePOC
{
class Program
{
static void Main(string[] args)
{
//Build some DataTable
DataTable dtb = new DataTable();
dtb.Clear();
dtb.Columns.Add("name");
dtb.Columns.Add("age");
DataRow row = dtb.NewRow();
row["name"] = "Thiago";
row["age"] = "33";
dtb.Rows.Add(row);
string msg = ("Some message" + Environment.NewLine + " Test purpose");
MyCodeActivity myCodeActivity = new MyCodeActivity();
myCodeActivity.Message = new InArgument<string>(msg);
//Passing the DataTable
//This is the solution given to the existing question:
myCodeActivity.Entrada = new InArgument<DataTable>(ExpressionServices.Convert((env) => dtb));
//This was my attempt which results in the same exception, but with 'Literal<DataTable>':...
//myCodeActivity.Entrada = new InArgument<DataTable>(dtb);
dtb = WorkflowInvoker.Invoke<DataTable>(myCodeActivity); // <==== Error
//Read the first row of the resulting DataTable
Console.WriteLine(dtb.Rows[0][0].ToString());
}
}
}
这是MyCodeActivity的代码:
namespace WorkflowConsolePOC
{
public sealed class MyCodeActivity : CodeActivity<DataTable>
{
public InArgument<string> Message { get; set; }
public InArgument<System.Data.DataTable> Entrada { get; set; }
// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override DataTable Execute(CodeActivityContext context)
{
// Obtain the runtime value of the input arguments
string codeString = context.GetValue(this.Message);
//Get the DataTable
DataTable entrada = context.GetValue<DataTable>(Entrada);
//Alter the first row, first column
entrada.Rows[0][0] = "Altered";
return entrada;
}
}
}
我的自定义活动甚至没有被执行。 该错误出现在WorkflowInvoker.Invoke。
'Literal <<> c__DisplayClass0>':Literal仅支持值类型和不可变类型System.String。 类型WorkflowConsolePOC.Program + <> c__DisplayClass0不能用作文字。
我在这里想念什么? 我在这停留了三天。 请您帮忙。 谢谢!
这是设置引用类型的正确方法:
myCodeActivity.Entrada = new InArgument<DataTable>((ctx) => dtb);
或者,您可以像这样调用和传递参数:
MyCodeActivity myCodeActivity = new MyCodeActivity();
var arguments = new Dictionary<String, Object>
{
{ "Message", msg },
{ "Entrada", dtb },
};
dtb = WorkflowInvoker.Invoke<DataTable>(myCodeActivity, arguments);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.