如何将结果与数组匹配

时间:2010-11-05 13:43:37

标签: c# linq linq-to-entities

我有一个对象数组。该对象有两个属性:值和索引。

我使用带有contains关键字的linq to entities查询将所有结果带回到与值匹配的表中。

现在问题是......我想将结果与对象索引相匹配......

执行此操作的最快方法是什么。我可以为对象添加属性。

这几乎就像我希望查询结果返回:

index = 1;
value = "searchkey"
queryvalue = "query value"

2 个答案:

答案 0 :(得分:1)

只是在黑暗中拍摄你需要的东西,但LINQ扩展方法可以处理索引作为lambda函数的第二个参数。 IE:

someCollection.Select((x,i)=> new {SomeProperty = x.Property,Index = i});

答案 1 :(得分:1)

根据您的问题,我认为我可以假设您定义了以下变量:

  • Lookup[](你查找数组)
  • IEnumerable<Record>(查询返回的结果)

......类型看起来大致如下:

public class Lookup
{
    public int Index { get; set; }
    public int Value { get; set; }
}

public class Record
{
    public int Value { get; set; }
    /* plus other fields */
}

然后你可以通过几种方式解决问题。

首先使用匿名类型:

var matches
    = from r in records
      join l in lookups on r.Value equals l.Value
      group r by l.Index into grs
      select new
      {
          Index = grs.Key,
          Records = grs.ToArray(),
      };

其他两个只使用标准LINQ GroupBy&amp; ToLookup

IEnumerable<IGrouping<int, Record>> matches2
    = from r in records
      join l in lookups on r.Value equals l.Value
      group r by l.Index;

ILookup<int, Record[]> matches3
    = matches2.ToLookup(m => m.Key, m => m.ToArray());

这些可以解决您的问题吗?