Вы не используете Contains () должным образом, как указано Theodor Zoulias , потому что IN в SQL проверяет равенство, в то время как contains будет LIKE в SQL. также вы заключаете в себя строку val с ' вместо ", ' работает только для одного символа.
Предполагая, что вы пытаетесь получить «m», если любое свойство имеет определенное значение, вам придется использовать отражение :
Сначала создайте метод для цикла по объекту и сопоставления с требуемым значением
public bool FieldSearch(object a, string b)
{
//Get the type of your object, to loop through its properties
Type t = a.GetType();
//loop and check (the loop stops once the first property that matches has been found!)
foreach(PropertyInfo p in t.GetProperties())
{
if(p.GetValue(a).ToString()==b)
{
return true;
}
}
return false;
}
Будьте осторожны с GetProperties () , возможно, вы захотите добавить BidingAttributes, поскольку он извлекает каждое (публичное) свойство.
Теперь просто используйте ваш новый метод bool на вашем linq: (не очень хорошая идея относительно производительности в зависимости от контекста)
.where(m => FieldSearch(m,"val"))
Хотя все это возможно, у вас, вероятно, есть проблема архитектуры , потому что вы очень быстро потеряете ссылку, поскольку этот запрос linq возвращает любой объект, имеющий это значение в любом поле; без указания какого поля.
Возможно, есть лучшие способы сделать то, что вы пытаетесь сделать.