C# 返回新的LINQ对象
我想写LINQ,它返回给我一个新对象(字符串,int)包含:C# 返回新的LINQ对象,c#,list,linq,linq-to-sql,C#,List,Linq,Linq To Sql,我想写LINQ,它返回给我一个新对象(字符串,int)包含: 字符串(职位名称) int(位置计数) 输出: PositionA 8 PostionB 12 PostionC 13 以下是我到目前为止的情况: public List<string, int> TestL() //or IEnumerable? { var q1 = TestList.GroupBy(s => s.Postion.ToUpper()) .
- 字符串(职位名称)
- int(位置计数)
PositionA 8
PostionB 12
PostionC 13
以下是我到目前为止的情况:
public List<string, int> TestL() //or IEnumerable?
{
var q1 = TestList.GroupBy(s => s.Postion.ToUpper())
.Select(d =>
{
return new
{
NameDisplay = d.Key,
Count = d.Count(s => s.PersonNR)
};
})
.OrderBy(g => g.Key);
return q1;
}
public List TestL()//还是IEnumerable?
{
var q1=TestList.GroupBy(s=>s.position.ToUpper())
.选择(d=>
{
还新
{
名称显示=d.键,
Count=d.Count(s=>s.PersonNR)
};
})
.OrderBy(g=>g.Key);
返回q1;
}
TestList有如下字段:职位、人名、城市、姓氏。所有字段都是
string
您可能正在查找元组。在C#7.3+的情况下,您可以尝试使用命名元组:
public IEnumerable TestL(){
返回测试列表
.GroupBy(s=>s.position.ToUpper())
.Select(chunk=>(名称显示:d.Key,计数:d.Count())
.OrderBy(item=>item.NameDisplay);
}
在旧的C#版本中,未命名的版本:
public IEnumerable TestL(){
返回测试列表
.GroupBy(s=>s.position.ToUpper())
.Select(chunk=>Tuple.Create(d.Key,d.Count()))
.OrderBy(item=>item.Item1);
}
最后,您可以实现一个自定义类:
公共类MyClass{
公共MyClass(字符串名称显示,整数计数){
名称显示=名称显示;
计数=计数;
}
公共字符串名称显示{get;private set;}
公共整数计数{get;私有集;}
}
...
公共IEnumerable TestL(){
返回测试列表
.GroupBy(s=>s.position.ToUpper())
.Select(chunk=>newmyclass(d.Key,d.Count())
.OrderBy(item=>item.NameDisplay);
}
如果要返回的不是IEnumerable
,而是List
,请在之后添加.ToList()
。OrderBy(…)
通过修改较少的代码,可以实现所需的输出,如
public List<(string, int)> TestL() //or IEnumerable?
{
var q1 = TestList.GroupBy(s => s.Postion.ToUpper())
.Select(d =>
{
return new
{
NameDisplay = d.Key,
Count = d.Count()
};
})
.OrderBy(g => g.NameDisplay)
.Select(x => (x.NameDisplay, x.Count))
.ToList();
return q1;
}
您可能正在寻找一个命名的元组():您不能有List
(在List
中t
仅表示一个类型参数),但是List
(这里我们有一个包含两个属性的元组)您不能在Select
之后调用OrderBy(g=>g.Key)
-再也没有组了。Order byNamedDisplay
@eh-sho:我出错了-无法将类型字符串转换为bool(s.PersonNR)哦,只保留Count=d.Count()
而不是Count=d.Count(s=>s.PersonNR)
请更新您的答案,因为它对其他人有用,谢谢
public IEnumerable<Tuple<string, int>> TestL() {
return TestList
.GroupBy(s => s.Postion.ToUpper())
.Select(chunk => Tuple.Create(d.Key, d.Count()))
.OrderBy(item => item.Item1);
}
public class MyClass {
public MyClass(string nameDisplay, int count) {
NameDisplay = nameDisplay;
Count = count;
}
public string NameDisplay {get; private set;}
public int Count {get; private set;}
}
...
public IEnumerable<MyClass> TestL() {
return TestList
.GroupBy(s => s.Postion.ToUpper())
.Select(chunk => new MyClass(d.Key, d.Count()))
.OrderBy(item => item.NameDisplay);
}
public List<(string, int)> TestL() //or IEnumerable?
{
var q1 = TestList.GroupBy(s => s.Postion.ToUpper())
.Select(d =>
{
return new
{
NameDisplay = d.Key,
Count = d.Count()
};
})
.OrderBy(g => g.NameDisplay)
.Select(x => (x.NameDisplay, x.Count))
.ToList();
return q1;
}
Install-Package "System.ValueTuple"