Как я могу сравнить два параметра, используя динамический linq - PullRequest
0 голосов
/ 17 октября 2018
using system.Linq.dynamic

public class data
 {
  public int column1{ get; set; }
  public int column2{ get; set; }
  public string column3{ get; set; }
 }
List<data> ListOfdata=new List<data>();
for(i=1:i<10;i++)
 {
  data newdata=new data();
  newdata.column1=i;
  newdata.column2=i+1;
  ListOfdata.Add(newdata)
 }

 condition1="column1!=Null AND column1=column2";

 var filter=ListOfdata.where(condition).Tolist();

Так что здесь, когда я передам

condition = "column1! = Null AND column1 = 3", я получу выходной фильтр данных ListOfdata

, но не смог получить данные фильтрас

условие = условие1;

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я использовал ваш код (с небольшой настройкой), и он работает:

using System.Collections.Generic;
using System.Linq; 
using System.Linq.Dynamic;

     static void Main(string[] args)
        {
            List<data> ListOfdata = new List<data>();
            for (int i = 1; i < 10; i++)
            {
                data newdata = new data();
                newdata.column1 = i;
                newdata.column2 = i + 1;
                ListOfdata.Add(newdata);
            }

            //below I update the boolean condition, it needs double == for comparison  
            // so column1 == column2-1 will be evaluated correctly
            string condition1 = "column1!=Null AND column1==column2-1";

            //used 'condition1' instead of 'condition'
            var filter = ListOfdata.Where(condition1).ToList();

            // HERE filter.Count() give me 9 !!
        }
    public class data
    {
        public int column1 { get; set; }
        public int column2 { get; set; }
        public string column3 { get; set; }
    }
0 голосов
/ 17 октября 2018

Существует подробное описание того, как создать динамический запрос для LINQ:

Этот запрос: _dbEntities.Customers.Where (cust => cust.CustomerId == 10) .FirstOrDefault ();

выглядит динамически:

ParameterExpression pe = Expression.Parameter(Customer, "cust");
var _prpToUse = Expression.Property(pe, "CustomerId"); 
var _cnstToUse = Expression.Constant(10); 
var qry = Expression.Equal(_prpToUse, _cnstToUse);
MethodCallExpression whereExpression = Expression.Call(  
      typeof(Queryable),  
      "Where",  
      new Type[] { lst.ElementType },  
      lst.Expression,  
      Expression.Lambda<Func<Customer, bool>>(qry, new 
      ParameterExpression[] { pe }));  
lstData.Provider.CreateQuery<Customer>(whereExpression).FirstOrDefault();

Выезд: https://www.c -sharpcorner.com / UploadFile / b1df45 / dynamic-query-using-linq /

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...