Exp*_* be 0 .net c# asp.net generics iqueryable
//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
}
Run Code Online (Sandbox Code Playgroud)
如何定义productQuery变量?
谢谢!
[编辑]
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>;
}
Run Code Online (Sandbox Code Playgroud)
我这样做,是不是正确的方式?
您可以将其声明为动态类型,如果您可以将类型解析延迟到运行时.
dynamic productQuery;
if (test == true)
{
productQuery = ordersRepository.ProductIn; //it returns IQueryable<ProductIn> type
}
else
{
productQuery = ordersRepository.ProductOut; //it returns IQueryable<ProductOut> type
}
Run Code Online (Sandbox Code Playgroud)
您的另一种选择是将其声明为对象类型,然后根据需要将其强制转换为其他类型.
object productQuery;
if (test == true)
{
productQuery = ordersRepository.ProductIn; //it returns IQueryable<ProductIn> type
}
else
{
productQuery = ordersRepository.ProductOut; //it returns IQueryable<ProductOut> type
}
// ... more logic ...
var unboxed = productQuery as IQueryable<ProductIn>;
if (unboxed != null) {
unboxed.Where( ... and away you go with Linq ...);
}
Run Code Online (Sandbox Code Playgroud)
操作编辑后更新
假设您有一个动态类型的productQuery.要在其上使用Linq,您需要定义委托的类型.假设ProductIn和ProductOut类型都具有字符串类型属性ProductNo.然后你可以像这样编写你的查询,再次使用动态.
productQuery.Where(new Func<dynamic,bool>(item => item.productNo));
Run Code Online (Sandbox Code Playgroud)
但是......我认为通过改变整个方法,你可以让你的生活变得更轻松.您显然正在使用ProductIn和ProductOut的通用接口,那么为什么不明确定义呢?
public interface IProduct
{
public string ProductNo { get; set; }
}
public class ProductIn : IProduct { ... }
public class ProductOut : IProduct { ... }
Run Code Online (Sandbox Code Playgroud)
现在你的代码变得更简单了.写这样:
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |