如何使用LINQ选择行中的数据?

时间:2014-03-11 13:46:04

标签: c# linq linq-to-objects

如何使用LINQ select来自所有行的所有Company NameCompany ID?我需要像这样的伪代码:

 var typedQry = from b in allData.AsEnumerable()
                where b.GetHeader("xxx") == "08/10/09 to 08/26/09"
                select CompanyName, CompanyID, ...

以下代码仅选择一个公司名称。相反,我想要所有行中的公司名称:

var typedQry3  = from b in allData.AsEnumerable()
select new { compname0 = b._rows[0][5]}; 

_rows中的数据为Company Name (e.g., allData[0]._rows[0][5], allData[0]._rows[1][5],....)Company ID,依此类推。

但是,Company NameCompany ID等未在DataProperty类中定义。它们的值将从数据文件插入到_rows中。

感谢任何帮助。以下是一些帮助您理解我的问题的代码。

List<DataProperty> allData = new List<DataProperty>();

DataProperty类由

组成
private readonly Dictionary<string, string> _headers = new Dictionary<string, string>(); 
private readonly List<string[]> _rows = new List<string[]>();

和这些方法(以及其他):

public string[] GetDataRow(int rowNumber){return _rows[rowNumber];}
public void AddDataRow(string[] row){_rows.Add(row);}

3 个答案:

答案 0 :(得分:1)

根据您的评论,如果您需要为每家公司sum,您可以尝试这样做:

var RowList1 = allData.SelectMany(u => u._rows.Select(t => new
        {
            CompanyName = t[5],
            Amount = Convert.ToInt64(t[1]) + Convert.ToInt64(t[2])
        }))
    .Where(u => u.CompanyName == "XXX")
    .OrderBy(u => u.CompanyName)
    .ToList();

如果你需要总结所有公司,你可以试试这个:

var SumAmount = allData.SelectMany(u => u._rows.Select(t => new
        {
             CompanyName = t[5],
             Amount = Convert.ToInt64(t[1]) + Convert.ToInt64(t[2])
        }))
    .Where(u => u.CompanyName == "XXX")
    .DefaultIfEmpty()
    .Sum(u => u.Amount);

您可以使用这些

编写自己的自定义查询

答案 1 :(得分:0)

首先,您可以接收行,然后遍历它们。 这个例子可以帮到你

var rows = (from DataRow dRow in dTable.Rows
                            select new {col1=dRow["dataColumn1"],col2=dRow["dataColumn2"]});

        foreach (var row in distinctRows) 
        {
            var value1=row.col1.ToString();
            var value2=row.col2.ToString();  

        }

答案 2 :(得分:0)

您可以使用它来获取所有公司名称:

var AllCompanyNames = allData.SelectMany(u => u._rows.Select(t => t[5])).ToList();

这就是为了获得更多财产:

var Rows = allData.SelectMany(u => 
        u._rows.Select(t => new
        {
            CompanyName = t[5],
            Other1 = t[1],
            Other2 = t[2]
        }))
    .ToList();

并且,如果您需要检查任何条件:

var FilteredRows = allData.SelectMany(u => 
        u._rows.Select(t => new
        {
            CompanyName = t[5],
            Other1 = t[1],
            Other2 = t[2]
        }))
    .Where(u => u.CompanyName == "XXX")
    .ToList();