LINQ从数据库列字符串内的对象数组查询
本文关键字:对象 数组 查询 字符串 数据库 LINQ | 更新日期: 2023-09-27 18:20:29
对不起,很难为疑问选择一个好的标题。
我正在使用LINQ对一个名为"Parameter"的特定列字符串查询我的存储库,该字符串具有';'分隔符。数据库列的模式类似于"name1=value1;name2=value2;name3=value3",我可以将其转换为名为GenericParameter[]的对象,通过';'拆分字符串。
处理Parameter的GenericParameter类如下所示:
public class GenericParameter
{
public string Name {get; set;} //name1
public string Value {get; set;}//value1
public static GenericParameter[] GetParameters(string parameters)
{
List<GenericParameter> chargingParameterList = new List<GenericParameter>();
if (!string.IsNullOrEmpty(parameters))
{
string[] splitedChargingParameter = parameters.Trim().Split(';');
foreach (string parameter in splitedChargingParameter)
{
string[] pair = parameter.Split('=');
if (pair.Length != 2) continue;
GenericParameter genericParameter = new GenericParameter()
{
Name = pair[0].Trim(),
Value = pair[1].Trim()
};
chargingParameterList.Add(genericParameter);
}
}
return chargingParameterList.ToArray();
}
}
我现在正在研究的方法是这样的:
public ICollection<MyData> GetMyDataByParameter(string param)
{
//param="name1=value1;name2=value2"
List<MyData> dataToReturn = context
.MyDataRepository
.AsQueryable()
.Where(p => p.ParameterStr.Contains(param))
.ToList();
return dataToReturn;
}
我正在重构它,因为通过这种方式,我的"param"可以按不同的顺序传递,如"name2=value2;name1=value1",并且可能始终与数据库列Parameter不匹配。
我正试着做这样的事情:
public ICollection<MyData> GetMyDataByParameter(string param)
{
GenericParameter[] receivedParamArray = GenericParameter.GetParameters(param);
//param="name1=value1;name2=value2"
//GenericParameter[0].Name is "name1"
//GenericParameter[0].Value is "value1"
// TODO: QUERY the records on repository that matchs all the
//receivedParamArray
List<MyData> dataToReturn = context
.AsQueryable()
//.Where(p => p.ParameterStr.Contains(receivedParamArray))
.ToList();
return dataToReturn;
}
如何查询与所有receivedParamArray匹配的存储库列Parameter(字符串)。由注释的Where表示的查询将不起作用。
请给我任何建议。
public static IQueryable<MyData> FilterByParameters(this IQueryable<MyData>,Dictionary<string,string> dict)
{
IQueryable<Mydata> query=this;
foreach(var entry in dict)
{
string val = String.Format(";{0}={1};",entry.Key,entry.Value);
query=query.Where(a=>(";"+a.ParameterStr+";").Contains(val));
}
return query;
}
public static IQueryable<MyData> FilterByParameters(this IQueryable<MyData>,string s)
{
return this.FilterByParameters(GetParameters(s));
}
public static Dictionary<string,string> GetParameters(string s)
{
return s.Split(';')
.Where(t=>t.Contains("="))
.ToDictionary(t=>t.Split('=')[0].Trim,t=>t.Split('=')[1].Trim());
}
像这样使用:
var results=db.MyData.FilterByParameters("name1=value1");
或
var search=new Dictionary<string,string>{{"name1","value1"},{"name2","value2"}};
var results=db.MyData.FilterByParameters(search);