У меня небольшая проблема :) У меня есть список, в котором некоторые аргументы дублируются.Я должен удалить это.Я не могу использовать Distinct, потому что я должен видеть только некоторые поля (не все). Я думаю, что это отличный вариант для использования лямбда-выражений.
У меня есть объявление на моем объекте, над которым я работаю, не то же самое, ноИдея аналогична.
var keys = new string[] {"column1", "column2"};
var repeatedValues = new object[] {5, 15};
var values = new List<Dictionary<string, object>>();
//MAKE FAKE DOUBLE
values.Add(new Dictionary<string, object> {
{ "column1", 5 }, { "column2", 15 }, { "column3", "test" },
{ "column4", "test1" } });
for (int i = 0; i < 10; i++)
{
values.Add(new Dictionary<string, object> {
{"column1", i}, {"column2", 10 + i}, "column3", "test"},
{"column4", "test1"}});
}
Длина столбцов ключей всегда равна повторяемым значениям - но изменяется, некоторые длины равны 1, другие 2,3,5.Не более 5
Ключи похожи на primaryKeys в таблице базы данных.Это очень похоже.Поэтому мы ищем дубликаты в «столбцах первичных ключей» - я думаю, это хорошее сравнение.
Мы видим, что в этом примере дубликат имеет значение 5 в "column1" и значения 15 в "column2".Как я раньше говорил, я должен удалить это, но прежде чем я должен считать повторяющиеся элементы.
Я пытаюсь сделать код подобным образом (я знаю, что метод func awalys сбой, потому что (object) 1 == (object) 1 всегда возвращаетfalse, но это пример:
Expression expression = null;
for (int i = 0; i < keys.Length; i++)
{
Expression<Func<Dictionary<string, object>, bool>> exp = x => x[keys[i]] == repeatedValues[i];
if (expression == null)
expression = exp.Body;
else
expression = Expression.AndAlso(expression, exp.Body);
}
var parameterExpression = Expression.Parameter(typeof (Dictionary<string, object>), "x");
var lamba = Expression.Lambda<Func<Dictionary<string, object>, bool>>(expression, parameterExpression);
var res = lamba.Compile();
var counts = queryLis.Count(res);
Но компилятор дает мне исключительную переменную 'x' типа 'System.Collections.Generic.Dictionary`2 [System.String, System.Object]', на которую ссылается область действия'', но он не определен
Можно ли сделать это таким образом?
(Не об исключении) На другом шаге, может быть, выражение запрашивает например repeatValues [i] (послеза) и он не будет знать, что это?