Как использовать значение параметра в качестве свойства, которое будет выбрано в запросе LINQ? - PullRequest
0 голосов
/ 23 августа 2010

Я использую LINQ-to-Entities и вот мой запрос

public void SomeFunction(string searchField)
{
var data = from a in dx.SomeTable where         
                a.SomeProperty="270"
                select a;
.
.
.

}

Теперь, если мне нужно было использовать значение параметра "searchField" в качестве свойства, которое будет выбрано в предложении where, токак мне это сделать ?

т.е. я хочу присвоить значение параметра "searchField" свойству, которое я проверяю в предложении where.

Итак ... значение "SomeProperty" в a.SomePropertyдолжно быть значением "searchField".Как это сделать?

PS:

Я не хочу a.SomeProperty = searchField.

То, что я хочу, - это чтобы само «SomeProperty» было заменено значением «searchField», а затем, это должно быть проверено, чтобы увидеть, равно ли оно 270.

Ответы [ 2 ]

0 голосов
/ 23 августа 2010

Если вызывающий знает тип вашего a (скажем, это MyType), я бы сказал, что вам не нужен динамический LINQ - вы можете просто передать функцию предиката:

public void SomeFunction(Func<MyType, bool> selector)
{
    // ...
    var data =  from a in dx.SomeTable
                where selector(a)
                select a;
}

// Calling code
SomeFunction(a => a.SomeProperty == "270");

Или, если вы хотите сохранить значение 270 в пределах SomeFunction, передайте функцию проекции, чтобы вывести SomeProperty:

public void SomeFunction(Func<MyType, string> propertyExtractor)
{
    // ...
    var data = from a in dx.SomeTable
               where propertyExtractor(a) == "270"
               select a;
}

// Calling code
SomeFunction(a => a.SomeProperty);

(извините, если это не скомпилировано, в данный момент я не на компиляторе)

0 голосов
/ 23 августа 2010

Скотту опубликовал, как это сделать некоторое время назад: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

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