[英]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>")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.