如何在 C# 中使用 DBContext 编写动态 LINQ 查询
How to write Dynamic LINQ queries using DBContext in C#
我正在修改我的项目以使用 DBContext 而不是 ObjectContext。
我现有的代码
var query = context.Vehicles.OrderBy("it.VehicleType.VehicleTypeID").
GroupBy("it.VehicleType.VehicleTypeID", "Min(it.ODO_Reading) AS MinRunVehicle, it.VehicleType.VehicleTypeID");
以上代码是使用ObjectContext编写的。
将我的项目更改为从 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.
我想知道如何在 DBContext 中指定动态 Linq 查询。有人可以帮忙吗
您可以使用
var query = context.Vehicles.OrderBy(m=>m.it.VehicleType.VehicleTypeID)
以下是所有转换方法,包括 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();
第一个示例使用 eSQL,而不是某种类型的动态 LINQ。
DbContext 不允许您直接执行 eSQL 查询,但您可以访问底层的 ObjectContext 并像以前一样使用它:
var query = ((IObjectContextAdapter)context).ObjectContext
.CreateQuery<Vehicle>("<ESQL Query>")
我正在修改我的项目以使用 DBContext 而不是 ObjectContext。 我现有的代码
var query = context.Vehicles.OrderBy("it.VehicleType.VehicleTypeID").
GroupBy("it.VehicleType.VehicleTypeID", "Min(it.ODO_Reading) AS MinRunVehicle, it.VehicleType.VehicleTypeID");
以上代码是使用ObjectContext编写的。 将我的项目更改为从 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.
我想知道如何在 DBContext 中指定动态 Linq 查询。有人可以帮忙吗
您可以使用
var query = context.Vehicles.OrderBy(m=>m.it.VehicleType.VehicleTypeID)
以下是所有转换方法,包括 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();
第一个示例使用 eSQL,而不是某种类型的动态 LINQ。
DbContext 不允许您直接执行 eSQL 查询,但您可以访问底层的 ObjectContext 并像以前一样使用它:
var query = ((IObjectContextAdapter)context).ObjectContext
.CreateQuery<Vehicle>("<ESQL Query>")