我正在使用linq,我想知道是否有任何方法可以在我的linq代码中引用我正在处理的集合?我正在寻找的是这样的:
let result = (from t in someCollection
where t == something
select t).Where(res => res.start == THIS.Min(temp => temp.start))
所以我想在这个查询中实现的是THIS变量应该提供对应用where子句的集合的引用:
(from t in someCollection
where t == something
select t)
有很多方法可以解决这个问题,但我特别感兴趣的是使用对正在使用的集合的引用。希望你们中的一些人对此有所了解!
谢谢!
答案 0 :(得分:1)
执行您的示例所述的方式是这样的:
var minValue = someCollection.Min(x => x.start);
var result = from t in someCollection
where t.id > 5 // replace this line with your "where t == something"
where t.start == minValue
select t;
但是说你必须为每一个做一些其他比较 集合中的元素与其他元素。是否有一些 做这样的事情的方式?
如果您确实需要将一个项目与列表中的其他项目进行比较,您可以像这样设置代码:
var result = from t in someCollection
where t.id > 5 // replace this line with your "where t == something"
let minValue = someCollection.Min (x => x.start)
where t.start == minValue
select t;
第二个示例的问题是,您在someCollection
中访问的每个项目都将被强制重新计算minValue。
现在,这是一个完全做作的例子,说明在访问集合的每个成员时必须访问整个集合。它只是通过一个项目列表并输出每个项目以及所有其他具有较少日期的项目:
var eventItems = new[]
{
new { Name = "alpha", DateCreated = DateTime.Today.AddDays(1) },
new { Name = "bravo", DateCreated = DateTime.Today.AddDays(2) },
new { Name = "charlie", DateCreated = DateTime.Today.AddDays(-1) },
new { Name = "delta", DateCreated = DateTime.Today.AddDays(-5) },
new { Name = "echo", DateCreated = DateTime.Today.AddDays(-3) },
new { Name = "foxtrot", DateCreated = DateTime.Today.AddDays(3) },
new { Name = "golf", DateCreated = DateTime.Today.AddDays(-4) }
};
var results = from item in eventItems
where item.Name.Length > 2
let prevDays = eventItems.Where (i => i.DateCreated < item.DateCreated)
select new
{
Name = item.Name,
CurrentDate = item.DateCreated,
PreviousItems = prevDays
};
输出:
也许其中一个示例可以帮助您解决确切的问题。