[英]How to write Dynamic LINQ queries using DBContext in C#
I am modifying my project to use DBContext instead of ObjectContext. 我正在修改项目以使用DBContext而不是ObjectContext。 My existing code
我现有的代码
var query = context.Vehicles.OrderBy("it.VehicleType.VehicleTypeID").
GroupBy("it.VehicleType.VehicleTypeID", "Min(it.ODO_Reading) AS MinRunVehicle, it.VehicleType.VehicleTypeID");
The above code is written using ObjectContext. 上面的代码是使用ObjectContext编写的。 After changing my project to inherit from DBContext I am getting the below error
将项目更改为从DBContext继承后,出现以下错误
Error 89 The type arguments for method 'System.Linq.Queryable.OrderBy<TSource,TKey>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,TKey>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
I want to know how to specify dynamic Linq query in DBContext. 我想知道如何在DBContext中指定动态Linq查询。 Can somebody help.
有人可以帮忙吗?
您可以使用
var query = context.Vehicles.OrderBy(m=>m.it.VehicleType.VehicleTypeID)
Here's how to convert it all including OrderBy
and GroupBy
这是转换包括
OrderBy
和GroupBy
在内的所有内容的方法
void Main()
{
var vehicles = new List<Vehicle>();
for (int i = 0; i < 10; i++)
{
vehicles.Add(new Vehicle());
}
vehicles.OrderBy(vehicle => vehicle.VehicleType.VehicleTypeID)
.GroupBy(vehicleType => vehicleType.VehicleType.VehicleTypeID,
vehicle => vehicle.ODO_Reading,
(vehicleTypeID, minRunVehicle) => new
{
VehicleTypeId = vehicleTypeID,
minRunVehicle = minRunVehicle
})
.ToList()
.ForEach(vehicle =>
{
Console.WriteLine(vehicle.VehicleTypeId);
vehicle.minRunVehicle.ToList()
.ForEach(minRun =>
{
Console.WriteLine ("\t > :" + minRun);
});
Console.WriteLine ("\n");
});
}
public class Vehicle
{
public Vehicle()
{
this.VehicleType = new VehicleType();
this.ODO_Reading = random.Next(100, 100000);
}
public VehicleType VehicleType { get; set; }
public int ODO_Reading { get; set; }
}
public class VehicleType
{
public VehicleType()
{
VehicleTypeID = random.Next(1, 10);
}
public int VehicleTypeID { get; set; }
}
public static Random random = new Random();
The first example uses eSQL, not some type of dynamic LINQ. 第一个示例使用eSQL,而不是某种类型的动态LINQ。
DbContext doesn't allow you to perform eSQL queries directly, but you can get access to the underlying ObjectContext and use it as before: DbContext不允许您直接执行eSQL查询,但是您可以访问底层的ObjectContext并像以前一样使用它:
var query = ((IObjectContextAdapter)context).ObjectContext
.CreateQuery<Vehicle>("<ESQL Query>")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.