引用您在LINQ中工作的集合

时间:2012-08-08 08:50:30

标签: linq

我正在使用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)

有很多方法可以解决这个问题,但我特别感兴趣的是使用对正在使用的集合的引用。希望你们中的一些人对此有所了解!

谢谢!

1 个答案:

答案 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
    };

输出:

enter image description here

也许其中一个示例可以帮助您解决确切的问题。