我HAVA表LINQ在C#中的動態表列
我相應的SQL查詢
sQuery = "Select * from Vehicle where " + variant + "='Y'";
我怎麼能寫在LINQ相同的查詢?使用lambda表達式
Vehiclelist.Where(q => q.Trucks=="Y" || q.Cars=="Y" || q.Utility=="Y");
我HAVA表LINQ在C#中的動態表列
我相應的SQL查詢
sQuery = "Select * from Vehicle where " + variant + "='Y'";
我怎麼能寫在LINQ相同的查詢?使用lambda表達式
Vehiclelist.Where(q => q.Trucks=="Y" || q.Cars=="Y" || q.Utility=="Y");
試試這個
VehicleDatatable.AsEnumerable().Where(q=>q.Trucks=="Y" || q.Cars=="Y" || q.Utility=="Y");
另一種方式
(from d in VehicleDatatable.AsEnumerable() where string.compare(d["Trucks"],"Y")==0 select d)
這不會解決我的問題。我將列名稱作爲變量。我只需要查詢該列。 –
您可以通過使用System.Linq.Expression
命名空間動態地建立lambda表達式,並把它傳遞給Where
方法。
例如:
public IQueryable<Vehicle> GetAccounts(string variant)
{
// Build equivalent lambda to 'param => param.{variant} == "Y"'
// This is lambda parameter
var param = Expression.Parameter(typeof(Vehicle));
// This is lambda body (comparison)
var body = Expression.Equal(
// Access property {variant} of param
Expression.Property(param, typeof(Vehicle).GetProperty(variant)),
// Constant value "Y"
Expression.Constant("Y")
);
// Build lambda using param and body defined above
var lambda = Expression.Lambda<Func<Vehicle, bool>>(body, param);
// Use created lambda in query
return VehicleDatatable.Where(lambda);
}
另一個想法是查詢轉換了一下。 你可以用下面的查詢實現同樣的工作:
sQuery = "Select * from Vehicle where (Tracks+Cars+Utility) LIKE '" + value + "'";
哪裏value
是「Y__」或「ÿ」或具體取決於車型要查詢「__Y」。這絕對不是最有效的,但是轉換爲linq很容易。
構建查詢:
var query = Vehiclelist;
if (column == "Trucks")
{
query = query.Where(q => q.Trucks=="Y");
}
else if (column == "Cars")
{
query = query.Where(q => q.Cars=="Y");
}
else if (column == "Utility")
{
query = query.Where(q => q.Utility=="Y");
}
這種方法更容易維護,更容易測試。你有強類型的表達式和透明的過濾器。
我甚至喜歡這一個是不是字面上適合OP的要求。 –
這也可能是另一種方法:
PropertyInfo pi = typeof(Vehicles).GetProperty(vehVariant);
var services = context.Vehicles.ToList();
services = services.Where(item => pi.GetValue(item).ToString().Trim() == "Y").ToList();
編碼愉快。
的[在LINQ動態WHERE條件]可能的複製(http://stackoverflow.com/questions/5674639/dynamic-where-condition-in-linq) –