如何使用一个属性的不同值填充AutoCompleteBox过滤器?

时间:2012-09-16 10:33:16

标签: c# linq visual-studio-lightswitch

我的表格有一个日期字段,我想从中查询所有不同的年份,并在我的ACB屏幕过滤器中使用那些年份来查看同一个表格。

我想弄清楚我需要的Linq代码。我只需要查询返回类似的内容:

2012

2011

2010

并将这些值用作我的自动完成框的选择列表。

非常感谢。

3 个答案:

答案 0 :(得分:2)

如果您的日期字段从不包含null,则此查询将在EF上执行:

    var years = (from row in ctx.YourTable
                 select row.DateField.Year).Distinct().AsEnumerable().Select(e => e.ToString());

这将返回IEnumerable<字符串>但如果它适合你,最后添加.ToList()或ToArray()。

对于completness,如果你的Date字段可以为空,你应该过滤掉空值:

    var years = (from row in ctx.YourTable
                 where row.DateField != null
                 select row.DateField.Value.Year).Distinct().AsEnumerable().Select(e => e.ToString());

答案 1 :(得分:1)

您可以执行所需操作的唯一方法是创建自定义RIA服务,然后将其添加为数据源。这可能是第一次令人生畏,但它真的很容易。

此链接将说明基础知识。那么你可以使用Kyle在他的答案中展示的LINQ语法。

How Do I: Display a Chart Built On Aggregated Data

答案 2 :(得分:0)

您无法以编程方式设置AutoCompleteBox的选择列表。请参阅this SO question

但是,您可以在_PreprocessQuery方法中使用LINQ。使用查询设计器创建一个空查询,单击“编写代码”旁边的向下箭头,然后选择_PreprocessQuery方法。然后使用@ xeondev的LINQ代码:

partial void Query1_PreprocessQuery(ref IQueryable<TableName> query)
{
    query = (from row in query
             where row.DateField != null
             select row.DateField.Value.Year).Distinct().AsEnumerable().Select(e => e.ToString());
}