我将动态传递一个实体作为参数。但是,在对同一实体对象使用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();
}