2015-04-30 2 views
0

В приведенном ниже выражении лямбда у меня есть три столбца в условии where, которые могут отличаться в зависимости от ввода, который я получаю из базы данных, если это был статический список, я мог бы построить выражение, как показано ниже, но оно динамическое, поэтому мне нужно добавить динамическое предложение where, количество столбцов, которое у меня есть, где предложение будет равно количеству элементов в списке. поэтому мне нужно построить цикл или что-то еще, как я его выполню.Создание пользовательского предложения where с динамическим вводом столбца LINQ

dt.AsEnumerable().Where(x => (Convert.ToDecimal(x["Total"]) <= list[0] && Convert.ToDecimal(x["bal"]) <= list[1] && Convert.ToDecimal(x["issued"]) <= list[2])).ToList().Count; 
+0

Пожалуйста, объясните '3' в первом ряду вывода, какие строки вы подсчитали? В таблице входных данных всего 2 значения меньше 2, 0,8 и 1,6. –

+0

@ LasseV.Karlsen-я теперь отредактировал вопрос, я также включил строку, которая равна этой, i, e той же строке из таблицы ввода –

+0

, если вы будете использовать запрос вместо linq, это будет: select t2. * , (выберите count (*) из таблицы1, где columnYouSearch <= compareValue), как Count from table2 t2 – virusivv

ответ

1

я сумел сделать динамический LINQ

var dynamicQuery = dt.AsEnumerable(); //to add dynamic where clause, first convert datatable to enumerable. 
        foreach(string name in columnName) //maintaining column names in a seperate list, as list would be dynamic 
        { 
         dynamicQuery = dynamicQuery.Where(r => (Convert.ToDecimal(r[name]) <= list[columnName.IndexOf(name)])); 
        } 
        int count=dynamicQuery.Count(); 
0

Я обычно создаю словарь

using System; 
 
using System.Collections.Generic; 
 
using System.Linq; 
 
using System.Text; 
 
using System.Data; 
 

 
namespace ConsoleApplication1 
 
{ 
 
    class Program 
 
    { 
 
     static void Main(string[] args) 
 
     { 
 
      DataTable dt = new DataTable(); 
 
      //get a dictionary the contains a double as a key and the value 
 
      // the count of the number of times the key occurs 
 
      Dictionary<double, int> dict = dt.AsEnumerable() 
 
       .GroupBy(x => x.Field<double>("Total"), y => y) 
 
       .ToDictionary(x => x.Key, y => y.ToList().Count); 
 
      //sample number of key to lookup 
 
      double num = 778.660; 
 
      //get the number of times the key appears in the input data. 
 
      int count = dict[num]; 
 
     } 
 
    } 
 
} 
 
​

+0

@ jdweng-решение неясно, оно не работает, кроме того, коды жестко закодированы, не может быть сделано с использованием индекса столбца, поскольку я буду иметь индексы столбцов, но не уверен в количестве столбцов. –

Смежные вопросы