【发布时间】:2015-08-30 05:57:58
【问题描述】:
我正在尝试创建一个动态 where 子句以允许用户选择一个字段并输入过滤条件。我已经尝试了很多解决方案,但无法将它们放在一起。我想我已经很接近了,但就是无法克服最后一个错误。
这是一个(简化的)方法,它应该查询我的联系人表并返回域对象联系人列表。
internal static IEnumerable<Contact> GetContacts(int pageSize, int page, string searchField, string searchValue)
{
var pageContacts = new List<Contact>();
using (var db = new TLWDatabaseDataContext())
{
var param = Expression.Parameter(typeof(TLW.Models.Contact), "t");
// MemberExpression member = Expression.Property(param, filter);
ConstantExpression constant = Expression.Constant(searchValue, searchValue.GetType());
BinaryExpression exp = Expression.Equal(Expression.PropertyOrField(param, searchField), constant);
Expression<Func<Contact, bool>> lambda1 = Expression.Lambda<Func<Contact, bool>>(exp, param);
IQueryable<Data.Contact> dbContacts = db.Contacts.AsQueryable();
dbContacts = dbContacts.Where(lambda1);
dbContacts = dbContacts.Skip(page * pageSize).Take(pageSize);
pageContacts.AddRange(dbContacts.Select(contact => new Contact
{
Address1 = contact.Address1,
Address2 = contact.Address2,
CellPhone = PrettyPhone(contact.CellPhone),
City = contact.City,
Created = contact.CreatedOn,
Email = contact.Email,
FirstName = contact.FirstName,
HomePhone = PrettyPhone(contact.HomePhone),
Id = contact.Id,
LastName = contact.LastName,
LastUpdated = contact.LastUpdated,
State = contact.State,
WorkPhone = PrettyPhone(contact.WorkPhone),
Zip = contact.Zip
}));
}
return pageContacts;
}
这非常接近,但我在 dbContacts = dbContacts.Where(lambda1) 行出现编译器错误。
将 lambda1 参数发送到 Where 时,由于转换而发生错误。错误的文本是...
错误 CS1503 参数 2:无法从 'System.Linq.Expressions.Expression>' 转换为 'System.Linq.Expressions.Expression>'
TIA 提供任何指导。我已经成功地为我的 OrderBy 创建了一个表达式树(为简洁起见,从上面的代码中删除了),但是无法让 Epression Tree 为 Where 工作。
【问题讨论】:
标签: c# linq linq-to-sql lambda