C#不同实体类型的IQueryable定义 //我需要在这里定义productQuery 如果(测试==真) { var productQuery=ordersepository.ProductIn;//返回IQueryable类型 } 其他的 { var productQuery=ordersepository.ProductOut;//返回IQueryable类型 }

C#不同实体类型的IQueryable定义 //我需要在这里定义productQuery 如果(测试==真) { var productQuery=ordersepository.ProductIn;//返回IQueryable类型 } 其他的 { var productQuery=ordersepository.ProductOut;//返回IQueryable类型 },c#,asp.net,.net,generics,iqueryable,C#,Asp.net,.net,Generics,Iqueryable,如何定义productQuery变量 谢谢大家! [编辑] //I need to deifne productQuery here if (test == true) { var productQuery = ordersRepository.ProductIn; //it returns IQueryable<ProductIn> type } else { var productQuery = ordersRepo

如何定义productQuery变量

谢谢大家!

[编辑]

//I need to deifne productQuery here
    if (test == true)
    {
      var productQuery = ordersRepository.ProductIn; //it returns IQueryable<ProductIn> type
    }
    else
    {
      var productQuery = ordersRepository.ProductOut; //it returns IQueryable<ProductOut> type
    }
动态产品类型;
如果(测试==真)
{
productType=ordersRepository.ProductIn;//返回IQueryable类型
}
其他的
{
productType=ordersRepository.ProductOut;//返回IQueryable类型
}
var productQuery=productType为IQueryable;
if(productQuery==null)
{
productQuery=productType为IQueryable;
}
我是这样做的,对吗

如果您同意将类型解析推迟到运行时,可以将其声明为动态类型

dynamic productType;

if (test == true)
    {
      productType = ordersRepository.ProductIn; //it returns IQueryable<ProductIn> type
    }
    else
    {
      productType = ordersRepository.ProductOut; //it returns IQueryable<ProductOut> type
    }

var productQuery = productType as IQueryable<ProductIn>;
if (productQuery == null)
{
     productQuery = productType as IQueryable<ProductIn>;
}
现在您的代码变得简单多了。这样写:

public interface IProduct
{
    public string ProductNo { get; set; }
}

public class ProductIn : IProduct { ... }
public class ProductOut : IProduct { ... }
IQueryable产品查询;
如果(测试==真)
{
productQuery=ordersRepository.ProductIn;//返回IQueryable类型
}
其他的
{
productQuery=ordersRepository.ProductOut;//返回IQueryable类型
}
字符串myResult=productQuery.Where(item=>item.productNo==productNo.FirstOrDefault();
如果您同意将类型解析推迟到运行时,可以将其声明为动态类型

dynamic productType;

if (test == true)
    {
      productType = ordersRepository.ProductIn; //it returns IQueryable<ProductIn> type
    }
    else
    {
      productType = ordersRepository.ProductOut; //it returns IQueryable<ProductOut> type
    }

var productQuery = productType as IQueryable<ProductIn>;
if (productQuery == null)
{
     productQuery = productType as IQueryable<ProductIn>;
}
现在您的代码变得简单多了。这样写:

public interface IProduct
{
    public string ProductNo { get; set; }
}

public class ProductIn : IProduct { ... }
public class ProductOut : IProduct { ... }
IQueryable产品查询;
如果(测试==真)
{
productQuery=ordersRepository.ProductIn;//返回IQueryable类型
}
其他的
{
productQuery=ordersRepository.ProductOut;//返回IQueryable类型
}
字符串myResult=productQuery.Where(item=>item.productNo==productNo.FirstOrDefault();

或<代码>如果((productQuery作为IQueryable)!=null)。。否则如果((productQuery作为IQueryable)!=null)Ty,请发表评论!如果(productQuery.GetType()==typeof(IQueryable)){productQuery=productQuery作为IQueryable;}否则{productQuery=productQuery作为IQueryable;}productQuery=productQuery.Where(x=>x.productNo==productNo);但是错误消息说“错误15不能使用lambda表达式作为动态调度操作的参数,除非先将其强制转换为委托或表达式树类型”@Expertwannabe您可以为条件块内的每种类型编写单独的Linq查询吗?@dbaseman I只编写一个Linq查询'productQuery=productQuery。其中(x=>x.productNo==productNo);'因为两个对象都有productNo。@Expertwannabe我认为更好的方法是为这两个类定义接口,并解决这个问题。请参阅我的更新答案。或者..
if((productQuery as IQueryable)!=null)…else if((productQuery as IQueryable)!=null)
Ty谢谢你的评论!我尝试了这个,如果(productQuery.GetType()==typeof(IQueryable)){productQuery=productQuery作为IQueryable;}否则{productQuery=productQuery作为IQueryable;}productQuery=productQuery.Where(x=>x.productNo==productNo);但错误消息说“错误15不能将lambda表达式用作动态调度操作的参数,而不首先将其强制转换为委托或表达式树类型”@Expertwannabe您可以为条件块内的每种类型编写单独的Linq查询吗?@dbaseman我只编写一个Linq查询'productQuery=productQuery.Where(x=>x.productNo==productNo);'因为这两个对象都有productNo。@ExpertWannab我认为更好的方法是为这两个类定义接口,并解决这个问题。请参阅我更新的答案。第二个示例:尝试
对象
而不是
动态
。我尝试了对象,但错误消息说“error 16'object”不包含r'Where'和no extension method'Where'可以找到'object'类型的第一个参数(是否缺少using指令或程序集引用?),必须在
cast
之后调用Linq方法。
var foo=productQuery作为IQueryable;if(foo!=null){foo.Where(…)
我没有测试它,但我相信它可以正常工作。进入第二个示例:尝试
对象
而不是
动态
。我尝试了对象,但错误消息说“error 16'object”不包含“Where”的定义,并且没有扩展方法“Where”可以找到“接受类型为“object”的第一个参数”(您是否缺少using指令或程序集引用?)您必须在
cast
之后调用Linq方法。
var foo=productQuery作为IQueryable;if(foo!=null){foo.Where(…)
我还没有测试它,但我相信它可以正常工作。
public interface IProduct
{
    public string ProductNo { get; set; }
}

public class ProductIn : IProduct { ... }
public class ProductOut : IProduct { ... }
IQueryable<IProduct> productQuery;

if (test == true)
{
    productQuery = ordersRepository.ProductIn; //it returns IQueryable<ProductIn> type
}
else
{
    productQuery = ordersRepository.ProductOut; //it returns IQueryable<ProductOut> type
}

string myResult = productQuery.Where(item => item.productNo == productNo).FirstOrDefault();