Вы действительно должны найти способ A. Переименовать столбцы и B. Уменьшить их количество (более 1000 с лишним). Прошло много времени с тех пор, как я использовал LINQ для SQL, но если все, что вам нужно, это запросить способности, можете ли вы вместо этого определить представление с псевдонимами столбцов?
Кроме того, одним из способов решения этой проблемы было бы определение именованных выражений, представляющих предопределенные фильтры. Например, если предположить, что класс назван Client
:
Expression<Func<Client, bool>> hasRedEyes = c => c.Col1443; // == true is implicit
var query = Clients.Where(hasRedRyes).ToList();
Но обратите внимание, что они могут быть составлены только в том случае, если вы AND
их через последовательные вызовы * к Where
:
Expression<Func<Client, bool>> hasRedEyes = c => c.Col1443;
Expression<Func<Client, bool>> hasBrownHair = c => c.Col1567 == "brown";
var query = Clients.Where(hasRedEyes).Where(hasBrownHair).ToList();
Если вам нужен OR
, вам нужно определить фильтр or'd как его собственное предопределенное выражение *, например:
Expression<Func<Client, bool>> hasRedEyesOrBrownHair = c => c.Col1443 || c.Col1567 == "brown";
var query = Clients.Where(hasRedEyesOrBrownHair).ToList();
(* Альтернативой последнему биту будет либо используйте инструмент, такой как LINQKit или , чтобы вручную использовать API * 1018. * С последним вам придется принять два отдельных условия, получить тело отдельных выражений лямбда-выражений, использовать посетитель выражения для замены параметр одного из них, чтобы соответствовать другому, вызовите Expression.Or
и, наконец, Expression.Lambda
, чтобы создать новый фильтр, который вы могли бы передать Where
. Эта та же самая концепция может быть применена и к 'и к и', хотя все это получает немного хитро.)