如何使用 LINQ 进行嵌套查询

本文关键字:嵌套 查询 何使用 LINQ | 更新日期: 2023-09-27 17:56:26

我不擅长 LINQ,但是当我尝试编写 linq 查询时,会出现错误。

void Main()
{
    var csvlines = File.ReadAllLines(@"c:'test.csv");     
    var csvLinesData = csvlines.Skip(1).Select(l => l.Split(',').ToArray());

    var users = csvLinesData.Select(data => new User
    {
                CSRName = data[12],
                Incomming = csvLinesData.Count(w => w.direction='I'),
                outgoing = csvLinesData.Count(w => w.direction='O')
    }).ToList();
    users.Dump();
}
class User
{
   public string CSRName;
   public string CallStart;
   public string CallDuration;
   public string RingDuration;
   public string Direction;
   public string IsInternal;
   public string Continuation;
   public string ParkTime;
    public string Incomming;
}

这两行导致错误

Incomming = csvLinesData.Count(w => w.direction='I'),
outgoing = csvLinesData.Count(w => w.direction='O')

我正在尝试读取包含许多数据的CSV文件。 我只是喜欢从CSV文件读取后显示数据

我的数据应如下所示

CSR Name    Incomming       OutGoing
---------   ---------       ----------
Wills           5                9
Wills           21               74
Wills           44               45
Wills           54               2
Wills           15               20

如果我需要绘制上面的输出,那么应该是正确的 LINQ 查询。 寻求帮助。 谢谢

编辑 1

我更改代码位如下

void Main()
{
    var csvlines = File.ReadAllLines(@"M:'smdr(backup08-06-2015).csv");   
    var csvLinesData = csvlines.Skip(1).Select(l => l.Split(',').ToArray());
    //int iDir = csvLinesData.Count(w => w.direction='I');
    var users = csvLinesData.Select(data => new User
    {
                CSRName = data[12],
                Incomming = csvLinesData.Count(w => w[4] == "I"),
                outgoing = csvLinesData.Count(w => w[4] == "O")
    }).ToList();
    users.Dump();
}
class User
{
    public string CSRName;
    public int outgoing;
    public int Incomming;
}

但仍然收到错误和错误 msg 是 无法隐式将类型"int"转换为"字符串"

我哪里犯了错误? 请指正。 谢谢

如何使用 LINQ 进行嵌套查询

这一行:

var csvLinesData = csvlines.Skip(1).Select(l => l.Split(',').ToArray());

产生IEnumerble<string[]>。选择它时,您可以访问 CSV 的列,如以下行所示:

CSRName = data[12],

此行的问题:

csvLinesData.Count(w => w.direction='I')

csvLinesData 的元素是没有direction字段或属性的string[]

无论如何,使用特定属性计算所有行看起来很奇怪,因为它会导致每个"用户"的数字相同。

因为我不知道你到底想做什么(我什至猜不到),我无法告诉你该做什么。


根据问题中的新部分进行编辑:

不能为字符串赋值整数:

Incomming = csvLinesData.Count(w => w[4] == "I"),

将属性Incomming更改为整数或从数字创建一个字符串(这可能不是您需要的):

Incomming = csvLinesData.Count(w => w[4] == "I").ToString(),

顺便说一句,它仍然无法工作,因为您计算了第 5 列== "I"的所有行,这导致每个用户的数字相同。您的示例在每行中都有不同的数字(但用户名相同)。这是非常令人困惑的。你真的必须考虑你真正想做什么,要么清楚地解释它,要么提供一些示例数据。