我的表有一个日期字段,我想从中查询所有不同的年份,并在我的 ACB 屏幕过滤器中为同一张表使用这些年份。
我正在尝试找出我需要的 Linq 代码。我只需要查询返回如下内容:
2012
2011
2010
并将这些值用作我的自动完成框的选择列表。
非常感谢。
我的表有一个日期字段,我想从中查询所有不同的年份,并在我的 ACB 屏幕过滤器中为同一张表使用这些年份。
我正在尝试找出我需要的 Linq 代码。我只需要查询返回如下内容:
2012
2011
2010
并将这些值用作我的自动完成框的选择列表。
非常感谢。
如果您的 Date 字段从不包含 null,则此查询将在 EF 上执行:
var years = (from row in ctx.YourTable
select row.DateField.Year).Distinct().AsEnumerable().Select(e => e.ToString());
这将返回一个 IEnumerable< string > 但如果适合您,则在末尾添加 .ToList() 或 ToArray() 。
为了完整性,如果您的 Date 字段可以为空,您应该过滤掉空值:
var years = (from row in ctx.YourTable
where row.DateField != null
select row.DateField.Value.Year).Distinct().AsEnumerable().Select(e => e.ToString());
您可以做任何事情的唯一方法是创建自定义 RIA 服务,然后将其添加为数据源。第一次可能看起来令人生畏,但它真的很容易。
此链接将解释基础知识。那么您可以使用 Kyle 在他的回答中展示的 LINQ 语法。
您不能以编程方式设置 AutoCompleteBox 的选择列表。请参阅这个 SO 问题。
_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());
}