Linq to sql LINQ to SQL:基于用户输入的where子句过滤器

Linq to sql LINQ to SQL:基于用户输入的where子句过滤器,linq-to-sql,Linq To Sql,在UI中,有一个下拉列表,用于获取参数“field”的值。它可以是一个特定的值,或者“All”是默认值,其中需要检索所有行,而不考虑“field”值 如何在LINQ中编写Where子句,以便用户为字段列提供一个值,然后将其用作筛选器,否则将从DB中获取所有行?您可以使用IQueryable作为LINQ查询的基础,并将所需的全部附加到它: 例如: string userInput = ""; using (var context = new EntityModel(

在UI中,有一个下拉列表,用于获取参数“field”的值。它可以是一个特定的值,或者“All”是默认值,其中需要检索所有行,而不考虑“field”值


如何在LINQ中编写Where子句,以便用户为字段列提供一个值,然后将其用作筛选器,否则将从DB中获取所有行?

您可以使用
IQueryable
作为LINQ查询的基础,并将所需的全部附加到它:

例如:

        string userInput = "";
        using (var context = new EntityModel())
        {
            IQueryable<MyEntity> query = context.MyEntities;

            if (!String.IsNullOrWhiteSpace(userInput))
                query = query.Where(x => x.MyFilterableProperty == userInput);

            return query.ToList();
        }
string userInput=”“;
使用(var context=new EntityModel())
{
IQueryable query=context.MyEntities;
如果(!String.IsNullOrWhiteSpace(userInput))
query=query.Where(x=>x.MyFilterableProperty==userInput);
返回query.ToList();
}

为什么要删除ToList()?这纯粹是一个示例,它导致了查询的执行。因为您的答案的整个要点是使用IQueryable和与ToList不匹配的ToList…我用
ToList()
的方式来说明这是示例的结束,因为查询正在执行。整个示例与中一样,取决于是否设置了
userInput
,查询不同。没关系,这是一个细节。给你一个+1。。。我认为在L2S中,您应该尽可能延迟查询执行。@Jeffery Khan谢谢!但是,我很难将代码转换为这种IQueryable格式。我有一个select查询,比如var result=。我怎样才能让它变得易懂。对不起,我是L2S新手,再次感谢您的帮助。