从自动填充方法中排除项目

时间:2010-08-13 12:43:26

标签: c# linq methods autocomplete

我有以下代码,用于删除文本框自动填充扩展程序中使用的项目列表:

    return autocomplete.tblAutoCompletes
            .Where(p => p.MemberId == memberid && p.LocationId == locationid && p.ACItem.Contains(prefixText))
            .OrderBy(p => p.ACItem)
            .Select(p => p.ACItem)
            .Take(count)
            .ToArray();

其中memberid和locationid是会话。

在这个项目列表中,我有一些我可能希望根据用户偏好排除的内容。此首选项也存储为会话。

例如,我有下表:

ACItem ACColumn
aa  Product
ab  Product
ac  Product
ad  Status
ae  Status
af  Status
ag  Category
ai  Category
aj  Category

如果我在文本框中输入“a”,将显示所有产品ACItems。

但是,可能存在一种情况,即我不希望用户自动完成显示某个状态和/或产品。例如,我不希望用户看到状态“af”或类别“ai”。

我将这些首选项存储为用户登录时的会话(即“DoNotDisplayaf”或“DoNotDisplayai”)

如何修改原始方法,以便自动完成功能考虑这些异常?

道歉,如果我的问题/例子有点朦胧。

感谢您收到任何帮助。

1 个答案:

答案 0 :(得分:1)

不太确定我关注,但鉴于您不希望显示所有产品类别,您是否能够在linq查询的Where子句中过滤掉这些?

.Where(p => p.MemberId == memberid 
     && p.LocationId == locationid 
     && p.ACItem.Contains(prefixText) 
     && shouldBeDisplayed(p)) 

ShouldBeDisplayed是一个函数,它使用会话状态中的条件检查给定项目,以判断它们是否应该显示。