【发布时间】:2015-11-03 21:30:08
【问题描述】:
抱歉,很难为疑问选择一个好的标题。
我正在使用 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" 并且可能不会一直匹配数据库列参数。
我正在尝试做这样的事情:
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匹配的存储库列参数(字符串)。由注释的 Where 表示的查询将不起作用。
请,我很感激任何建议。
【问题讨论】:
-
首先,去掉你的 GenericParameter 类并使用
Dictionary<string,string>。无需重新发明轮子。