Я работаю с MongoDb
и использует класс PredicateBuilder
для создания динамического предложения IN С#. Но исключение генерируется как:
[System.ArgumentException] {"Неподдерживаемый where where:."},
и динамически созданное предложение where
{c => (True AndAlso Invoke(c => (c.ID == value(ASP.search_aspx).txtid.Text), c))} ,
Используемый запрос:
var result = collection.AsQueryable<USER>()
.Where(where_clause)
.Select(c => new { c.ID, c.COMPANYNAME, c.EMAIL
}).Take(100).ToList();
Коллекция - это экземпляр MongoCollection
.
Код для создания where_clause
:
var where_clause = PredicateBuilder.True<GLUSR_USR>();
//object result=0;
if ((txtGlid.Text).Trim() != "")
{
where_clause = where_clause.And(c => c.GLUSR_USR_ID == txtGlid.Text);
}
if ((txtEmailid.Text).Trim() != "")
{
where_clause = where_clause.And(c => c.GLUSR_USR_EMAIL == txtEmailid.Text);
}
if ((txtPhone.Text).Trim() != "")
{
where_clause = where_clause.And(c => c.GLUSR_USR_PH_NUMBER == txtPhone.Text);
}
if ((txtMobile.Text).Trim() != "")
{
where_clause = where_clause.And(c => c.GLUSR_USR_PH_MOBILE == txtMobile.Text);
}
Попробуйте использовать AsExpandable()
:
var result = collection.AsQueryable<USER>()
.AsExpandable()
.Where(where_clause)
.Select(c => new { c.ID, c.COMPANYNAME, c.EMAIL
}).Take(100).ToList();
AsExpandable()
можно найти в LinqKit.
Из-за Invoke
он выглядит как ссылка на (ASP.search_aspx).txtid.Text
был зафиксирован в закрытии, а не оценивает значение в это время. Могу ли я попросить вас явно оценить значение текстового поля в локальном, чтобы предотвратить случайный разбор парсера выражения:
if (txtGlid.Text.Trim() != "")
{
string s = txtGlid.Text;
where_clause = where_clause.And(c => c.GLUSR_USR_ID == s);
}
where_clause
пожалуйста?