我有一个列表,其中装有数据库中的数据。
填充时,对象数组有10个元素
我想执行一个LINQ Select语句,该语句返回仅包含2个元素的List<object[]>
。如何选择这些元素1和2。
我尝试了以下对元素0有效的方法,但是如何获得元素0和元素1?
var resultDistinct = result.Select(p => p.GetValue(0)).Distinct();
var resultDistinct2 = result.Select(p => p.ElementAt(0)).Distinct();
答案 0 :(得分:2)
您可以为此使用匿名对象。
var items = result.Select(p => new { ValueA = p.GetValue(0), ValueB = p.GetValue(1) });
然后访问每个项目
foreach(var item in items)
{
var valueA = item.ValueA;
var valueB = item.ValueB;
}
答案 1 :(得分:1)
您可以使用Take
扩展方法:
items.Take(x);
这将返回集合的前x
个项目。
如果要跳过某些元素,可以在调用Skip(x)
之前使用Take
。这两种方法通常用于分页。
答案 2 :(得分:0)
如果您想与众不同,然后再为2,
result.Select(p => p).Distinct().Take(2);
如果只有2,
result.Take(2);
答案 3 :(得分:0)
private class Foo
{
public int Item1;
public int Item2;
public int Item3;
}
static void Main(string[] args)
{
List<Foo> foos = new List<Foo>
{
new Foo() { Item1 = 1, Item2 = 2, Item3 = 3 },
new Foo() { Item1 = 4, Item2 = 5, Item3 = 6 },
new Foo() { Item1 = 7, Item2 = 8, Item3 = 9 }
};
// Create a list of lists where each list has three elements corresponding to
// the values stored in Item1, Item2, and Item3. Then use SelectMany
// to flatten the list of lists.
var items = foos.Select(f => new List<int>() { f.Item1, f.Item2, f.Item3 }).SelectMany(item => item).Distinct();
foreach (int item in items)
Console.WriteLine(item.ToString());
Console.ReadLine();
}