不允许使用源类型"动态"或连接序列类型为"动态"的查询表达式



我将动态传递一个实体作为参数。但是,在对同一实体对象使用linq时,我遇到了一个异常。

错误:不允许使用源类型为"dynamic"或具有类型为"dynamic"的联接序列的查询表达式

private void CallCustomerCodeDynamically(dynamic customerEntities)
{
    var customerCode= from customer in customerEntities.CustomerInfoes
                   orderby customer.CustomerCode ascending
                   select customer.CustomerCode;
    ddlCustomerCode.DataSource = customerCode;
    ddlCustomerCode.DataBind();
}

请给我一个解决这个问题的建议。

如前所述,Linq与dynamic的配合不好。Linq大量使用扩展方法,这些方法在编译时被绑定,因此您不能使用dynamic,因为它将所有绑定推迟到运行时。

如果您有两个数据集,它们没有共同的基本类型或接口,但具有相同的实体类型(至少按名称),那么您将需要两个重载。您可能能够重构其中的一部分以提高重用性:

private void CallCustomerCodeDynamically(CustmoerEntities1 customerEntities)
{
    var customerCode= from customer in customerEntities.CustomerInfoes
                   orderby customer.CustomerCode ascending
                   select customer.CustomerCode;
    BindCodes(customerCode);
}

private void CallCustomerCodeDynamically(CustmoerEntities2 customerEntities)
{
    var customerCode= from customer in customerEntities.CustomerInfoes
                   orderby customer.CustomerCode ascending
                   select customer.CustomerCode;
    BindCodes(customerCode);
}
private void BindCodes(IEnumerable<string> customerCode)
{
    ddlCustomerCode.DataSource = customerCode;
    ddlCustomerCode.DataBind();
}

相关内容

  • 没有找到相关文章

最新更新