我有一个对象数组。该对象有两个属性:值和索引。
我使用带有contains关键字的linq to entities查询将所有结果带回到与值匹配的表中。
现在问题是......我想将结果与对象索引相匹配......
执行此操作的最快方法是什么。我可以为对象添加属性。
这几乎就像我希望查询结果返回:
index = 1;
value = "searchkey"
queryvalue = "query value"
答案 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());
这些可以解决您的问题吗?