0

我已经为此苦苦挣扎了几天,我很困惑。我希望有人可以提供替代建议。基本上,我正在使用 LinqToExcel 从 excel 中读取数据。但我想排除所有“评级”为“NR”的行。这是我的数据示例:

CompanyName Rating  SalesMan
Apple       2       Steve
Google      NR      Steve
Microsoft   3       John
Dell        1       Steve
Pepsi       3       John

我只想找到属于史蒂夫但没有评级为“NR”的所有公司。我的最终清单应该是:

CompanyName SalesMan
Apple       Steve
Dell        Steve

我已经尝试了以下代码,但它不起作用:

1)

var masterList = masterDataXL.Worksheet("data_all").Where(d => !d["Rating"].Equals("NR"));

2)

var masterList = masterDataXL.Worksheet("data_all")
    .Where(m =>
        !m["Rating"].Equals("NR")
        &&
        m["SalesMan"].ToString().Contains(resAnLastName)) // check for last name
    .Select(m => new ResAnTicksDataClass
    {
        Company = m["CompanyName"],
        Rating = m["Rating"],
        Seller = m["SalesMan"]
    }).AsEnumerable();

3) 为 Rating 创建了一个属性并执行了以下操作:

var masterList = masterDataXL.Worksheet("data_all")
.Where(m =>
    m["Analyst"].ToString().Contains(resAnLastName)) // check for last name
.Select(m => new ResAnTicksDataClass
{
    Company = m["CompanyName"],
    Rating = m["Rating"],
    Seller = m["SalesMan"]
}).AsEnumerable();
var dataList = (from m in masterList
where m.Rating != "NR"
select new ResAnTicksDataClass
{
    ResAnName = m.ResAnName,
    DescrTick = m.DescrTick
}).AsEnumerable();

我对您可能提出的任何其他建议持开放态度,因为我完全被难住了。非常感谢你。

4

2 回答 2

4

我建议您在 Excel 文件中选择“评级”列,然后对所选内容进行搜索和替换(将“NR”更改为“0”),然后进行过滤。应该有助于使用单一数据类型。

正如 phoog 所说,将 Excel 文件转换为表格,该表格需要指定每一列的类型。为此,它只会查看 Excel 文件的前 10 行。因此,如果您的文件在前 10 行中没有“NR”值,它会将列类型设置为INT,因此无法转换值“NR”。解决此问题的一个简单技巧是在 Excel 文件中添加一行,就在您的第一个数据行之前,数据使用您要使用的数据类型。

例如,如果一列使用文本值并且有时文本使用超过 255 个字符,请确保前 10 行至少有 1 个使用 256 个字符的文本值。否则,一旦创建表,该列将设置为VARCHAR(255)VARCHAR(MAX)然后在转换超过 255 个字符的文本时崩溃。

结论:始终确保前 10 行使用正确的类型和大小以适合 Excel 文件的所有行!

于 2012-09-28T17:24:52.983 回答
0

在您的第一个示例中,您应该更改此:

d => !d["Rating"].Equals("NR")

对此:

d => d["Rating"] != "NR"

它也可以写成更简洁的方式:

var masterList = 
    from d in masterDataXL.Worksheet("data_all")
    where d["Rating"] != "NR"
    select d;
于 2012-09-28T14:49:14.953 回答