添加模糊搜索
基于url表达式的模糊搜索
This commit is contained in:
@@ -150,9 +150,49 @@ public class IDIS_DBContext:DbContext
|
||||
{
|
||||
ChangeTracker.DetectChanges();
|
||||
ChangeTracker.Clear();
|
||||
queries = Values
|
||||
.Where(x => x.Handle.Contains(key) || x.CreateUser.Contains(key))
|
||||
.Select(x => new IDIS_Query()
|
||||
// queries = Values
|
||||
// .Where(x => x.Handle.Contains(key) || x.CreateUser.Contains(key))
|
||||
// .Select(x => new IDIS_Query()
|
||||
// {
|
||||
// Handle = x.Handle,
|
||||
// CreateTime = x.CreateTime,
|
||||
// UpdateTime = x.UpdateTime,
|
||||
// CreateUser = x.CreateUser,
|
||||
// Datas = Datas.Where(data => data.Handle == x.Handle).ToArray(),
|
||||
// References = References.Where(reference => reference.Handle == x.Handle).ToArray()
|
||||
// }).ToArray();
|
||||
// return queries.Any();
|
||||
var _data = Datas.ToList();
|
||||
var _values = Values.ToList();
|
||||
var handleKey = key.Split('?').First();
|
||||
|
||||
var _queries=_values.Where(x => x.Handle.Contains(handleKey) || (string.IsNullOrEmpty(x.CreateUser) is false && x.CreateUser.Contains(handleKey))).ToArray();
|
||||
var searchEnties =new List<KeyValuePair<string, string>>();
|
||||
if (_queries.Any() is false)
|
||||
{
|
||||
queries = Array.Empty<IDIS_Query>();
|
||||
return false;
|
||||
}
|
||||
if (key.Contains('?'))
|
||||
{
|
||||
var expression = key.Split("?", 2).Last();
|
||||
foreach (var cmd in expression.Split("&").Where(x=>x.Contains('=')).Where(x=>x.Split('=').Length is 2)) {
|
||||
var split = cmd.Split('=',2);
|
||||
var name = split[0];
|
||||
var value = split[1];
|
||||
searchEnties.Add(new KeyValuePair<string, string>(name,value));
|
||||
var validData = _data.Where(x => x.Name == name && x.Value == value);
|
||||
if (_queries.Any())
|
||||
{
|
||||
validData = validData.Where(x=>_queries.Any(y=>y.Handle==x.Handle));
|
||||
}
|
||||
_queries=_values
|
||||
.Select(x=>validData.Any(y=>x.Handle == y.Handle)?x:null)
|
||||
.Where(x=>x!=null)
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
queries = _queries.Select(x => new IDIS_Query()
|
||||
{
|
||||
Handle = x.Handle,
|
||||
CreateTime = x.CreateTime,
|
||||
@@ -161,6 +201,16 @@ public class IDIS_DBContext:DbContext
|
||||
Datas = Datas.Where(data => data.Handle == x.Handle).ToArray(),
|
||||
References = References.Where(reference => reference.Handle == x.Handle).ToArray()
|
||||
}).ToArray();
|
||||
if (searchEnties.Any())
|
||||
{
|
||||
var newQueries = new List<IDIS_Query>();
|
||||
foreach (var query in queries)
|
||||
{
|
||||
query.Datas = query.Datas.Where(x=>searchEnties.Any(y=>y.Key==x.Name&&y.Value==x.Value)).ToArray();
|
||||
newQueries.Add(query);
|
||||
}
|
||||
queries=newQueries.ToArray();
|
||||
}
|
||||
return queries.Any();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user