在VOL.Core里的Extensions的LambdaExtensions类中添加Eq方法
/// <summary>
/// 创建lambda表达式
/// 用于数据库条件查询,与where方法类似,当你变量里放的是数据库内的字段,就可以使用,不需要像where写死
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="propertyName"></param>
/// <param name="value"></param>
/// <returns></returns>
public static IQueryable<T> Eq<T>(this IQueryable<T> source, string propertyName, object value)
{
// 获取类型T上的属性
PropertyInfo propertyInfo = typeof(T).GetProperty(propertyName);
// 确保属性存在
if (propertyInfo == null)
{
throw new ArgumentException($"Property '{propertyName}' does not exist on type '{typeof(T)}'.");
}
// 创建Lambda表达式
ParameterExpression param = Expression.Parameter(typeof(T), "x");
Expression body = Expression.Equal(
Expression.Property(param, propertyInfo),
Expression.Constant(value, propertyInfo.PropertyType)
);
LambdaExpression lambda = Expression.Lambda(body, param);
// 创建Where表达式并应用
return source.Provider.CreateQuery<T>(
Expression.Call(
typeof(Queryable),
"Where",
new[] { typeof(T) },
source.Expression,
Expression.Quote((LambdaExpression)lambda)
)
);
}
原代码写死
private List<Bos_TableColumn> GetColumnList(string modelType,string tableName, string pageUrl, UserContext user, string refName, params string[] orderByFields)
{
List<Bos_TableColumn> billList = new List<Bos_TableColumn>();
int userID = user.UserId;
int TenantID = user.TenantID;
// 添加额外的条件
if ("IsList" == modelType|| "IsDatailList" == modelType) {
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName).ToList();
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName).ToList();
}
}
else if ("IsQuery"== modelType)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName&&x.IsQuery==1).ToList();
if (billList == null)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsQuery == 1).ToList();
}
}
else if ("IsEdit" == modelType)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().
Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName && x.IsEdit == 1).ToList();
if (billList == null)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsEdit == 1).ToList();
}
}
else if ("IsEditOptions" == modelType)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName).ToList();
if (billList == null)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsEditOptions == 1).ToList();
}
}
else if ("IsQueryOptions" == modelType)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.UserID == user.UserId && x.TenantID == user.TenantID && x.IsDefault == 0 && x.Free3 == refName && x.IsQueryOptions == 1).ToList();
if (billList == null)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Where(x => x.DbTableName == tableName && x.Free1 == pageUrl && x.TenantID == user.TenantID && x.IsDefault == 1 && x.Free3 == refName && x.IsQueryOptions == 1).ToList();
}
}
}
更改的新代码
private List<Bos_TableColumn> GetColumnList(string modelType,string tableName, string pageUrl, UserContext user, string refName, params string[] orderByFields)
{
List<Bos_TableColumn> billList = new List<Bos_TableColumn>();
int userID = user.UserId;
int TenantID = user.TenantID;
// 添加额外的条件
if ("IsList" == modelType|| "IsDatailList" == modelType) {
billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("UserID", userID).Eq("TenantID", TenantID).Eq("IsDefault", 0).Eq("Free3", refName).ToList();
if (billList == null)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("TenantID", TenantID).Eq("IsDefault", 1).Eq("Free3", refName).ToList();
}
}
else
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("UserID", userID).Eq("TenantID", TenantID).Eq("IsDefault", 0).Eq("Free3", refName).Eq(modelType,1).ToList();
if (billList == null)
{
billList = _repository.DbContext.Set<Bos_TableColumn>().Eq("DbTableName", tableName).Eq("pageUrl", pageUrl).Eq("TenantID", TenantID).Eq("IsDefault", 1).Eq("Free3", refName).Eq(modelType, 1).ToList();
}
}
}