Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回新的LINQ对象_C#_List_Linq_Linq To Sql - Fatal编程技术网

C# 返回新的LINQ对象

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()) .

我想写LINQ,它返回给我一个新对象(字符串,int)包含:

  • 字符串(职位名称)
  • 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 by
NamedDisplay
@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"