我的表格有一个日期字段,我想从中查询所有不同的年份,并在我的ACB屏幕过滤器中使用那些年份来查看同一个表格。
我想弄清楚我需要的Linq代码。我只需要查询返回类似的内容:
2012
2011
2010
并将这些值用作我的自动完成框的选择列表。
非常感谢。
答案 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语法。
答案 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());
}