我想知道如果我有一个excel文件,并且我试图通过linq查询获取数据,这是否可行?
Excel文件格式
+-----------------+-------------+
| Inputlocation | Inputvalue |
+-----------------+-------------+
| 1 | Hello |
+-----------------+-------------+
| 2 | World!!! |
+-----------------+-------------+
现在如果我使用Linq查询,则可以获得Inputvalue数据
var fileName = @"C:\Users\jshah\Documents\Visual Studio 2013\Projects\QA_ExpScript\QA_ExpScript\Excel\Inputdata.xls";
string sheetName = "Input";
var book = new LinqToExcel.ExcelQueryFactory(fileName);
var users = from x in book.Worksheet(Input) select x;
foreach (var x in users)
{
Console.WriteLine(x["1"]);
}
我想在这里做的是inputlocation是“1”给我Inputvalue是“你好”。我是否以正确的方式指定查询?我也在后面的代码中一次又一次地使用它。所以请为此提供更好的解决方案。
答案 0 :(得分:1)
您可以使用where
子句过滤数据,如下所示: -
var users = from x in book.Worksheet()
where x["Inputlocation"].Cast<int>() == 1
select x["Inputvalue"].Cast<string>();
然后您可以简单地遍历users
: -
foreach (var item in users)
{
Console.WriteLine(item.Inputvalue); //This will print "Hello"
}
虽然恕我直言总是更好地创建一个匹配类型,以避免在指定列名时因拼写错误而发生的任何异常。
public class User
{
public int Inputlocation { get; set; }
public string Inputvalue { get; set; }
}
这是查询: -
var users = from x in book.Worksheet<User>()
where x.Inputlocation == 1
select x;
答案 1 :(得分:0)
这与我正在做的有点相似,但在某种程度上回答了这个问题。但请不要@RahulSingh说的话。
还与代码中的@Chris 1相关。我认为这篇文章的创造者说他不想改变他职能中的任何事情。他想要的唯一更改是Console.WriteLine(x["1"]);
或Console.WriteLine(x["2"]);
来获取Inputvalue