Dynamic library (System.Linq.Dynamic) SQL LIKE Operator
Someone has posted a similar question here How Dynamic library (System.Linq.Dynamic) support LIKE Operator?
But it's not exactly what I want. The Contains operator mentioned in that post only do this in SQL "%SOMETHING%". But the LIKE operator in SQL can do this "SOME%THING". Is there a similar operator for Dynamic LINQ? If not, is there a solution for this? Maybe with Regex? Also is there a single character wildcard? E.g. "SOM$THING" returns "SOMETHING" or "SOM3THING"
Edit: I am developing a WPF application which should read log files in XML format. Each element contains 34 fields. So instead of writing a very long WHERE, I have used System.Reflection.PropertyInfo to iterate each field to write the query and then use System.Linq.Dynamic to execute it.
Edit2: I have edited the code so it's more readable for the viewers.
Here is some code:
Example 1:
prop.Name = "FirstName", paramterString = "Ke%in", returns "Kevin",
"Kelvin"...
Example 2:
prop.Name = "FirstName", paramterString = "Ke$in", returns "Kevin",
"Kelin"...
var query = "";
StringBuilder sb = new StringBuilder();
foreach (var prop in stringProps)
{
sb.Append($"({prop.Name} != null And {prop.Name}.Contains({parameterString})");
}
query = sb.ToString().Substring(0, sb.Length - 4);
filteredData = filteredData.Where(query);
One of the requirement is to implement a SQL LIKE operator, so the users can use something like this to get the result they want: FirstName LIKE 'SOME%THING'
c# sql linq dynamic-linq
|
show 1 more comment
Someone has posted a similar question here How Dynamic library (System.Linq.Dynamic) support LIKE Operator?
But it's not exactly what I want. The Contains operator mentioned in that post only do this in SQL "%SOMETHING%". But the LIKE operator in SQL can do this "SOME%THING". Is there a similar operator for Dynamic LINQ? If not, is there a solution for this? Maybe with Regex? Also is there a single character wildcard? E.g. "SOM$THING" returns "SOMETHING" or "SOM3THING"
Edit: I am developing a WPF application which should read log files in XML format. Each element contains 34 fields. So instead of writing a very long WHERE, I have used System.Reflection.PropertyInfo to iterate each field to write the query and then use System.Linq.Dynamic to execute it.
Edit2: I have edited the code so it's more readable for the viewers.
Here is some code:
Example 1:
prop.Name = "FirstName", paramterString = "Ke%in", returns "Kevin",
"Kelvin"...
Example 2:
prop.Name = "FirstName", paramterString = "Ke$in", returns "Kevin",
"Kelin"...
var query = "";
StringBuilder sb = new StringBuilder();
foreach (var prop in stringProps)
{
sb.Append($"({prop.Name} != null And {prop.Name}.Contains({parameterString})");
}
query = sb.ToString().Substring(0, sb.Length - 4);
filteredData = filteredData.Where(query);
One of the requirement is to implement a SQL LIKE operator, so the users can use something like this to get the result they want: FirstName LIKE 'SOME%THING'
c# sql linq dynamic-linq
Can you restrict your project to MS SQL Server? Then you could extend Dynamic LINQ to supportSQLMethods.Like
.
– NetMage
Nov 16 '18 at 18:56
Unfortunately this is not possible, because the data are imported by reading XML files.
– Kevin Man
Nov 19 '18 at 9:12
1
On the post you linked, there's an answer suggesting to use a combination ofContains
,StartsWits
,EndsWith
. Can this work for you? You can also use a Regex-Like, as shown here. But a pureLIKE
is something that LInq doesn't provide.
– HeyJude
Nov 19 '18 at 12:08
That's what I am afraid of. So I have used String.IndexOf() to create my own LIKE operator. If someone can review the code or even better, optimize it, I would be appreciate it. The code is posted in the answer.
– Kevin Man
Nov 19 '18 at 14:09
It begins to sound like this has nothing to do with SQL. If you just want to implement aLIKE
style operator for LINQ to Objects, I would suggest translating SQLLIKE
patterns to RE, and using the C# Regular Expression handling.
– NetMage
Nov 19 '18 at 19:48
|
show 1 more comment
Someone has posted a similar question here How Dynamic library (System.Linq.Dynamic) support LIKE Operator?
But it's not exactly what I want. The Contains operator mentioned in that post only do this in SQL "%SOMETHING%". But the LIKE operator in SQL can do this "SOME%THING". Is there a similar operator for Dynamic LINQ? If not, is there a solution for this? Maybe with Regex? Also is there a single character wildcard? E.g. "SOM$THING" returns "SOMETHING" or "SOM3THING"
Edit: I am developing a WPF application which should read log files in XML format. Each element contains 34 fields. So instead of writing a very long WHERE, I have used System.Reflection.PropertyInfo to iterate each field to write the query and then use System.Linq.Dynamic to execute it.
Edit2: I have edited the code so it's more readable for the viewers.
Here is some code:
Example 1:
prop.Name = "FirstName", paramterString = "Ke%in", returns "Kevin",
"Kelvin"...
Example 2:
prop.Name = "FirstName", paramterString = "Ke$in", returns "Kevin",
"Kelin"...
var query = "";
StringBuilder sb = new StringBuilder();
foreach (var prop in stringProps)
{
sb.Append($"({prop.Name} != null And {prop.Name}.Contains({parameterString})");
}
query = sb.ToString().Substring(0, sb.Length - 4);
filteredData = filteredData.Where(query);
One of the requirement is to implement a SQL LIKE operator, so the users can use something like this to get the result they want: FirstName LIKE 'SOME%THING'
c# sql linq dynamic-linq
Someone has posted a similar question here How Dynamic library (System.Linq.Dynamic) support LIKE Operator?
But it's not exactly what I want. The Contains operator mentioned in that post only do this in SQL "%SOMETHING%". But the LIKE operator in SQL can do this "SOME%THING". Is there a similar operator for Dynamic LINQ? If not, is there a solution for this? Maybe with Regex? Also is there a single character wildcard? E.g. "SOM$THING" returns "SOMETHING" or "SOM3THING"
Edit: I am developing a WPF application which should read log files in XML format. Each element contains 34 fields. So instead of writing a very long WHERE, I have used System.Reflection.PropertyInfo to iterate each field to write the query and then use System.Linq.Dynamic to execute it.
Edit2: I have edited the code so it's more readable for the viewers.
Here is some code:
Example 1:
prop.Name = "FirstName", paramterString = "Ke%in", returns "Kevin",
"Kelvin"...
Example 2:
prop.Name = "FirstName", paramterString = "Ke$in", returns "Kevin",
"Kelin"...
var query = "";
StringBuilder sb = new StringBuilder();
foreach (var prop in stringProps)
{
sb.Append($"({prop.Name} != null And {prop.Name}.Contains({parameterString})");
}
query = sb.ToString().Substring(0, sb.Length - 4);
filteredData = filteredData.Where(query);
One of the requirement is to implement a SQL LIKE operator, so the users can use something like this to get the result they want: FirstName LIKE 'SOME%THING'
c# sql linq dynamic-linq
c# sql linq dynamic-linq
edited Nov 16 '18 at 11:52
Kevin Man
asked Nov 16 '18 at 10:47
Kevin ManKevin Man
3812
3812
Can you restrict your project to MS SQL Server? Then you could extend Dynamic LINQ to supportSQLMethods.Like
.
– NetMage
Nov 16 '18 at 18:56
Unfortunately this is not possible, because the data are imported by reading XML files.
– Kevin Man
Nov 19 '18 at 9:12
1
On the post you linked, there's an answer suggesting to use a combination ofContains
,StartsWits
,EndsWith
. Can this work for you? You can also use a Regex-Like, as shown here. But a pureLIKE
is something that LInq doesn't provide.
– HeyJude
Nov 19 '18 at 12:08
That's what I am afraid of. So I have used String.IndexOf() to create my own LIKE operator. If someone can review the code or even better, optimize it, I would be appreciate it. The code is posted in the answer.
– Kevin Man
Nov 19 '18 at 14:09
It begins to sound like this has nothing to do with SQL. If you just want to implement aLIKE
style operator for LINQ to Objects, I would suggest translating SQLLIKE
patterns to RE, and using the C# Regular Expression handling.
– NetMage
Nov 19 '18 at 19:48
|
show 1 more comment
Can you restrict your project to MS SQL Server? Then you could extend Dynamic LINQ to supportSQLMethods.Like
.
– NetMage
Nov 16 '18 at 18:56
Unfortunately this is not possible, because the data are imported by reading XML files.
– Kevin Man
Nov 19 '18 at 9:12
1
On the post you linked, there's an answer suggesting to use a combination ofContains
,StartsWits
,EndsWith
. Can this work for you? You can also use a Regex-Like, as shown here. But a pureLIKE
is something that LInq doesn't provide.
– HeyJude
Nov 19 '18 at 12:08
That's what I am afraid of. So I have used String.IndexOf() to create my own LIKE operator. If someone can review the code or even better, optimize it, I would be appreciate it. The code is posted in the answer.
– Kevin Man
Nov 19 '18 at 14:09
It begins to sound like this has nothing to do with SQL. If you just want to implement aLIKE
style operator for LINQ to Objects, I would suggest translating SQLLIKE
patterns to RE, and using the C# Regular Expression handling.
– NetMage
Nov 19 '18 at 19:48
Can you restrict your project to MS SQL Server? Then you could extend Dynamic LINQ to support
SQLMethods.Like
.– NetMage
Nov 16 '18 at 18:56
Can you restrict your project to MS SQL Server? Then you could extend Dynamic LINQ to support
SQLMethods.Like
.– NetMage
Nov 16 '18 at 18:56
Unfortunately this is not possible, because the data are imported by reading XML files.
– Kevin Man
Nov 19 '18 at 9:12
Unfortunately this is not possible, because the data are imported by reading XML files.
– Kevin Man
Nov 19 '18 at 9:12
1
1
On the post you linked, there's an answer suggesting to use a combination of
Contains
, StartsWits
, EndsWith
. Can this work for you? You can also use a Regex-Like, as shown here. But a pure LIKE
is something that LInq doesn't provide.– HeyJude
Nov 19 '18 at 12:08
On the post you linked, there's an answer suggesting to use a combination of
Contains
, StartsWits
, EndsWith
. Can this work for you? You can also use a Regex-Like, as shown here. But a pure LIKE
is something that LInq doesn't provide.– HeyJude
Nov 19 '18 at 12:08
That's what I am afraid of. So I have used String.IndexOf() to create my own LIKE operator. If someone can review the code or even better, optimize it, I would be appreciate it. The code is posted in the answer.
– Kevin Man
Nov 19 '18 at 14:09
That's what I am afraid of. So I have used String.IndexOf() to create my own LIKE operator. If someone can review the code or even better, optimize it, I would be appreciate it. The code is posted in the answer.
– Kevin Man
Nov 19 '18 at 14:09
It begins to sound like this has nothing to do with SQL. If you just want to implement a
LIKE
style operator for LINQ to Objects, I would suggest translating SQL LIKE
patterns to RE, and using the C# Regular Expression handling.– NetMage
Nov 19 '18 at 19:48
It begins to sound like this has nothing to do with SQL. If you just want to implement a
LIKE
style operator for LINQ to Objects, I would suggest translating SQL LIKE
patterns to RE, and using the C# Regular Expression handling.– NetMage
Nov 19 '18 at 19:48
|
show 1 more comment
2 Answers
2
active
oldest
votes
Since there is no LIKE operator in Dynamic Linq library, I have created it my own version. The code is not pretty, but it does work. Hopefully someone can optimize it or suggest a better way to do this.
public string ParseWildcardInParameterString(string parameter, string propertyName)
{
string stringWithWildcard = parameter;
if (parameter.Contains("%") || parameter.Contains("$"))
{
stringWithWildcard = parameter;
string substrings = parameter.Split(new Char { '%', '$' }, StringSplitOptions.RemoveEmptyEntries);
string wildcards = ParseWildcards(parameter);
if (substrings.Any())
{
StringBuilder sb = new StringBuilder();
int substringsCount = substrings.Length;
for (int i = 0; i < substringsCount; i++)
{
if (!substrings[i].EndsWith("\"))
{
int index = parameter.IndexOf(substrings[i]);
if (i < substringsCount - 1)
{
index = parameter.IndexOf(substrings[i + 1], index + 1);
if (index > -1)
{
string secondPart = wildcards[i].Equals("%") ?
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length) > -1" :
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1) == {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1";
sb.Append($"({propertyName}.IndexOf("{substrings[i]}") > -1 And {secondPart}) And ");
}
}
}
}
stringWithWildcard = sb.Remove(sb.Length - 5, 5).Append(") Or ").ToString();
}
}
return stringWithWildcard;
}
private string ParseWildcards(string parameter)
{
IList<string> wildcards = new List<string>();
foreach (var chararcter in parameter.ToCharArray())
{
if (chararcter.Equals('%') || chararcter.Equals('$'))
{
wildcards.Add(chararcter.ToString());
}
}
return wildcards.ToArray();
}
add a comment |
Can you try if the Like functionality in System.Linq.Dynamic.Core does work for you?
Code example would be:
var dynamicFunctionsLike1 = context.Cars.Where(config, "DynamicFunctions.Like(Brand, "%a%")");
For full example, see ConsoleAppEF2.1.1/Program.cs
I got an error "DynamicFunctions is not valid" or something.
– Kevin Man
Nov 22 '18 at 16:07
Are you using EF 2.x ?
– Stef Heyenrath
Nov 22 '18 at 17:05
No, I just use standard Dynamic Linq. This code actually execute the filter. filteredData = filteredData.Where(query, parameters.ToArray());
– Kevin Man
Nov 23 '18 at 8:45
For that to work, you need the NuGet nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq
– Stef Heyenrath
Nov 23 '18 at 20:03
add a comment |
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53336298%2fdynamic-library-system-linq-dynamic-sql-like-operator%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Since there is no LIKE operator in Dynamic Linq library, I have created it my own version. The code is not pretty, but it does work. Hopefully someone can optimize it or suggest a better way to do this.
public string ParseWildcardInParameterString(string parameter, string propertyName)
{
string stringWithWildcard = parameter;
if (parameter.Contains("%") || parameter.Contains("$"))
{
stringWithWildcard = parameter;
string substrings = parameter.Split(new Char { '%', '$' }, StringSplitOptions.RemoveEmptyEntries);
string wildcards = ParseWildcards(parameter);
if (substrings.Any())
{
StringBuilder sb = new StringBuilder();
int substringsCount = substrings.Length;
for (int i = 0; i < substringsCount; i++)
{
if (!substrings[i].EndsWith("\"))
{
int index = parameter.IndexOf(substrings[i]);
if (i < substringsCount - 1)
{
index = parameter.IndexOf(substrings[i + 1], index + 1);
if (index > -1)
{
string secondPart = wildcards[i].Equals("%") ?
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length) > -1" :
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1) == {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1";
sb.Append($"({propertyName}.IndexOf("{substrings[i]}") > -1 And {secondPart}) And ");
}
}
}
}
stringWithWildcard = sb.Remove(sb.Length - 5, 5).Append(") Or ").ToString();
}
}
return stringWithWildcard;
}
private string ParseWildcards(string parameter)
{
IList<string> wildcards = new List<string>();
foreach (var chararcter in parameter.ToCharArray())
{
if (chararcter.Equals('%') || chararcter.Equals('$'))
{
wildcards.Add(chararcter.ToString());
}
}
return wildcards.ToArray();
}
add a comment |
Since there is no LIKE operator in Dynamic Linq library, I have created it my own version. The code is not pretty, but it does work. Hopefully someone can optimize it or suggest a better way to do this.
public string ParseWildcardInParameterString(string parameter, string propertyName)
{
string stringWithWildcard = parameter;
if (parameter.Contains("%") || parameter.Contains("$"))
{
stringWithWildcard = parameter;
string substrings = parameter.Split(new Char { '%', '$' }, StringSplitOptions.RemoveEmptyEntries);
string wildcards = ParseWildcards(parameter);
if (substrings.Any())
{
StringBuilder sb = new StringBuilder();
int substringsCount = substrings.Length;
for (int i = 0; i < substringsCount; i++)
{
if (!substrings[i].EndsWith("\"))
{
int index = parameter.IndexOf(substrings[i]);
if (i < substringsCount - 1)
{
index = parameter.IndexOf(substrings[i + 1], index + 1);
if (index > -1)
{
string secondPart = wildcards[i].Equals("%") ?
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length) > -1" :
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1) == {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1";
sb.Append($"({propertyName}.IndexOf("{substrings[i]}") > -1 And {secondPart}) And ");
}
}
}
}
stringWithWildcard = sb.Remove(sb.Length - 5, 5).Append(") Or ").ToString();
}
}
return stringWithWildcard;
}
private string ParseWildcards(string parameter)
{
IList<string> wildcards = new List<string>();
foreach (var chararcter in parameter.ToCharArray())
{
if (chararcter.Equals('%') || chararcter.Equals('$'))
{
wildcards.Add(chararcter.ToString());
}
}
return wildcards.ToArray();
}
add a comment |
Since there is no LIKE operator in Dynamic Linq library, I have created it my own version. The code is not pretty, but it does work. Hopefully someone can optimize it or suggest a better way to do this.
public string ParseWildcardInParameterString(string parameter, string propertyName)
{
string stringWithWildcard = parameter;
if (parameter.Contains("%") || parameter.Contains("$"))
{
stringWithWildcard = parameter;
string substrings = parameter.Split(new Char { '%', '$' }, StringSplitOptions.RemoveEmptyEntries);
string wildcards = ParseWildcards(parameter);
if (substrings.Any())
{
StringBuilder sb = new StringBuilder();
int substringsCount = substrings.Length;
for (int i = 0; i < substringsCount; i++)
{
if (!substrings[i].EndsWith("\"))
{
int index = parameter.IndexOf(substrings[i]);
if (i < substringsCount - 1)
{
index = parameter.IndexOf(substrings[i + 1], index + 1);
if (index > -1)
{
string secondPart = wildcards[i].Equals("%") ?
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length) > -1" :
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1) == {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1";
sb.Append($"({propertyName}.IndexOf("{substrings[i]}") > -1 And {secondPart}) And ");
}
}
}
}
stringWithWildcard = sb.Remove(sb.Length - 5, 5).Append(") Or ").ToString();
}
}
return stringWithWildcard;
}
private string ParseWildcards(string parameter)
{
IList<string> wildcards = new List<string>();
foreach (var chararcter in parameter.ToCharArray())
{
if (chararcter.Equals('%') || chararcter.Equals('$'))
{
wildcards.Add(chararcter.ToString());
}
}
return wildcards.ToArray();
}
Since there is no LIKE operator in Dynamic Linq library, I have created it my own version. The code is not pretty, but it does work. Hopefully someone can optimize it or suggest a better way to do this.
public string ParseWildcardInParameterString(string parameter, string propertyName)
{
string stringWithWildcard = parameter;
if (parameter.Contains("%") || parameter.Contains("$"))
{
stringWithWildcard = parameter;
string substrings = parameter.Split(new Char { '%', '$' }, StringSplitOptions.RemoveEmptyEntries);
string wildcards = ParseWildcards(parameter);
if (substrings.Any())
{
StringBuilder sb = new StringBuilder();
int substringsCount = substrings.Length;
for (int i = 0; i < substringsCount; i++)
{
if (!substrings[i].EndsWith("\"))
{
int index = parameter.IndexOf(substrings[i]);
if (i < substringsCount - 1)
{
index = parameter.IndexOf(substrings[i + 1], index + 1);
if (index > -1)
{
string secondPart = wildcards[i].Equals("%") ?
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length) > -1" :
$"{propertyName}.IndexOf("{substrings[i + 1]}", {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1) == {propertyName}.IndexOf("{substrings[i]}") + "{substrings[i]}".Length + 1";
sb.Append($"({propertyName}.IndexOf("{substrings[i]}") > -1 And {secondPart}) And ");
}
}
}
}
stringWithWildcard = sb.Remove(sb.Length - 5, 5).Append(") Or ").ToString();
}
}
return stringWithWildcard;
}
private string ParseWildcards(string parameter)
{
IList<string> wildcards = new List<string>();
foreach (var chararcter in parameter.ToCharArray())
{
if (chararcter.Equals('%') || chararcter.Equals('$'))
{
wildcards.Add(chararcter.ToString());
}
}
return wildcards.ToArray();
}
edited Nov 19 '18 at 14:50
answered Nov 19 '18 at 14:11
Kevin ManKevin Man
3812
3812
add a comment |
add a comment |
Can you try if the Like functionality in System.Linq.Dynamic.Core does work for you?
Code example would be:
var dynamicFunctionsLike1 = context.Cars.Where(config, "DynamicFunctions.Like(Brand, "%a%")");
For full example, see ConsoleAppEF2.1.1/Program.cs
I got an error "DynamicFunctions is not valid" or something.
– Kevin Man
Nov 22 '18 at 16:07
Are you using EF 2.x ?
– Stef Heyenrath
Nov 22 '18 at 17:05
No, I just use standard Dynamic Linq. This code actually execute the filter. filteredData = filteredData.Where(query, parameters.ToArray());
– Kevin Man
Nov 23 '18 at 8:45
For that to work, you need the NuGet nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq
– Stef Heyenrath
Nov 23 '18 at 20:03
add a comment |
Can you try if the Like functionality in System.Linq.Dynamic.Core does work for you?
Code example would be:
var dynamicFunctionsLike1 = context.Cars.Where(config, "DynamicFunctions.Like(Brand, "%a%")");
For full example, see ConsoleAppEF2.1.1/Program.cs
I got an error "DynamicFunctions is not valid" or something.
– Kevin Man
Nov 22 '18 at 16:07
Are you using EF 2.x ?
– Stef Heyenrath
Nov 22 '18 at 17:05
No, I just use standard Dynamic Linq. This code actually execute the filter. filteredData = filteredData.Where(query, parameters.ToArray());
– Kevin Man
Nov 23 '18 at 8:45
For that to work, you need the NuGet nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq
– Stef Heyenrath
Nov 23 '18 at 20:03
add a comment |
Can you try if the Like functionality in System.Linq.Dynamic.Core does work for you?
Code example would be:
var dynamicFunctionsLike1 = context.Cars.Where(config, "DynamicFunctions.Like(Brand, "%a%")");
For full example, see ConsoleAppEF2.1.1/Program.cs
Can you try if the Like functionality in System.Linq.Dynamic.Core does work for you?
Code example would be:
var dynamicFunctionsLike1 = context.Cars.Where(config, "DynamicFunctions.Like(Brand, "%a%")");
For full example, see ConsoleAppEF2.1.1/Program.cs
answered Nov 21 '18 at 12:05
Stef HeyenrathStef Heyenrath
4,31694583
4,31694583
I got an error "DynamicFunctions is not valid" or something.
– Kevin Man
Nov 22 '18 at 16:07
Are you using EF 2.x ?
– Stef Heyenrath
Nov 22 '18 at 17:05
No, I just use standard Dynamic Linq. This code actually execute the filter. filteredData = filteredData.Where(query, parameters.ToArray());
– Kevin Man
Nov 23 '18 at 8:45
For that to work, you need the NuGet nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq
– Stef Heyenrath
Nov 23 '18 at 20:03
add a comment |
I got an error "DynamicFunctions is not valid" or something.
– Kevin Man
Nov 22 '18 at 16:07
Are you using EF 2.x ?
– Stef Heyenrath
Nov 22 '18 at 17:05
No, I just use standard Dynamic Linq. This code actually execute the filter. filteredData = filteredData.Where(query, parameters.ToArray());
– Kevin Man
Nov 23 '18 at 8:45
For that to work, you need the NuGet nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq
– Stef Heyenrath
Nov 23 '18 at 20:03
I got an error "DynamicFunctions is not valid" or something.
– Kevin Man
Nov 22 '18 at 16:07
I got an error "DynamicFunctions is not valid" or something.
– Kevin Man
Nov 22 '18 at 16:07
Are you using EF 2.x ?
– Stef Heyenrath
Nov 22 '18 at 17:05
Are you using EF 2.x ?
– Stef Heyenrath
Nov 22 '18 at 17:05
No, I just use standard Dynamic Linq. This code actually execute the filter. filteredData = filteredData.Where(query, parameters.ToArray());
– Kevin Man
Nov 23 '18 at 8:45
No, I just use standard Dynamic Linq. This code actually execute the filter. filteredData = filteredData.Where(query, parameters.ToArray());
– Kevin Man
Nov 23 '18 at 8:45
For that to work, you need the NuGet nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq
– Stef Heyenrath
Nov 23 '18 at 20:03
For that to work, you need the NuGet nuget.org/packages/Microsoft.EntityFrameworkCore.DynamicLinq
– Stef Heyenrath
Nov 23 '18 at 20:03
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53336298%2fdynamic-library-system-linq-dynamic-sql-like-operator%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Can you restrict your project to MS SQL Server? Then you could extend Dynamic LINQ to support
SQLMethods.Like
.– NetMage
Nov 16 '18 at 18:56
Unfortunately this is not possible, because the data are imported by reading XML files.
– Kevin Man
Nov 19 '18 at 9:12
1
On the post you linked, there's an answer suggesting to use a combination of
Contains
,StartsWits
,EndsWith
. Can this work for you? You can also use a Regex-Like, as shown here. But a pureLIKE
is something that LInq doesn't provide.– HeyJude
Nov 19 '18 at 12:08
That's what I am afraid of. So I have used String.IndexOf() to create my own LIKE operator. If someone can review the code or even better, optimize it, I would be appreciate it. The code is posted in the answer.
– Kevin Man
Nov 19 '18 at 14:09
It begins to sound like this has nothing to do with SQL. If you just want to implement a
LIKE
style operator for LINQ to Objects, I would suggest translating SQLLIKE
patterns to RE, and using the C# Regular Expression handling.– NetMage
Nov 19 '18 at 19:48