我正在创建一个搜索成员的函数,并且想在我的searchResults变量中添加一个Where。但是,在执行此操作之前,可能需要将其设置为IQueryable。

这是我要完成的工作:

var searchResults = listMembers.DataSource = members.getAllMembers().OrderByDescending(x => x.createdDate).Select(x => new
    {
        x.ID,
        x.memberNumber,
        x.name,
        x.email,
        x.birthDate,
        hasPayed = Helper.renderBoolImage(x.hasPayed, true),
        isConfirmed = Helper.renderBoolImage(x.isConfirmed, true),
        isExportedToExcel = Helper.renderBoolImage(x.isExportedToExcel, true)
    });

    if (!String.IsNullOrEmpty(search.name))
    {
        searchResults = searchResults.Where(x => x.name.ToLower().Equals(enc(search.name.ToLower())));
    }


但是此行无法编译,因为它无法解析Where:

searchResults = searchResults.Where(x => x.name.ToLower().Equals(enc(search.name.ToLower())));

最佳答案

这就是问题:

var searchResults = listMembers.DataSource = members.getAllMembers()...


您应该使用:

var searchResults = members.getAllMembers()...;

if (!String.IsNullOrEmpty(search.name))
{
    searchResults = searchResults.Where(...);
}

listMembers.DataSource = searchResults;


当前searchResults的类型与listMembers.DataSource的类型相同,而不是members.getAllMembers...的类型

通常,我建议您不要执行多个分配,例如您的原始代码(x = y = z)-正如您所发现的,它会使代码更加混乱。

关于c# - 搜索-可查询的Linq,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11723313/

10-17 02:10