How could I define a where in criteria with Dynamic Linq?
I tired workaround below but it must not work, because it doesn't make sense!
context.Records.Where("@0.Contains(ID)", new object[]{
   new string[] {"1", "2", "3"}
}); // throws error No property or field 'ID' exists in type 'String'
Edit 1:
Thanks to everybody, All you need is to use it or outerIt keyword in your Dynamic.Linq query, so in my example i just need to use outerIt:
context.Records.Where("@0.Contains(outerIt.ID)", new object[]{
   new string[] {"1", "2", "3"}
});
You can find more example and information here: Advanced Linq - Dynamic Linq query library: Add support for 'Contains' extension
Other folks here introduced interesting workarounds but they are not useful if we use Dynamic.Linq library. Oleksandr Nahirniak found this question on Stackoverflow. There is also a blog post about advanced Linq queries with Dynamic.Linq which reviewdhere.
Since version 1.0.4 the library also supports Contains extension as well. It could be done just like below:
 query = Contact.GetContactsList()
                .AsQueryable()
                .Where("@0.Contains(outerIt.Country)", new List<String>() { "Austria", "Poland" }); 
or
query = Contact.GetContactsList()
               .AsQueryable()
               .Where("@0.Contains(outerIt.Country) && it.BirthDate.Year > @1", new List<string>() { "Austria", "Poland" }, 1955);
there are two keywords it and outerIt. It represent to the list that you have passed as a parameter and outerIt represent the collection itself.
So here is my working example:
context.Records.Where("@0.Contains(outerIt.ID)", new object[]{
   new string[] {"1", "2", "3"}
});
                        If you work with EF you can use direct sql commands, like:
context.Database.ExecuteSqlCommand($"SELECT * FROM Records AS r WHERE r.{dynamicPropertyName} IN @ids", new string[] {"1", "2", "3"});
EDIT
Solved:
System.Linq.Dynamic - Can I use IN clause in WHERE statement
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With