2015-12-09 2 views
0

Я хотел бы знать, есть ли у меня файл excel, и я пытаюсь получить данные через запрос linq, это будет возможно?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, который является" Hello ". Правильно ли я задаю запрос? Также я использую это снова и снова позже в своем коде. Поэтому, пожалуйста, дайте лучшее решение для этого.

ответ

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; 
+0

Я понимаю, но что, если я должен использовать это снова и снова, то я должен изменить, где положение. Есть ли другой лучший вариант, так что, хотя я сохраняю один и тот же запрос, я могу извлечь данные из inputvalue без изменения where where. Спасибо за ответ заранее. –

+1

«1» в коде здесь может быть переменной, если хотите. – Chris

+0

@ user3338497 - Вы можете обернуть это внутри функции и передать параметр «Inputlocation». Так мы делаем для любого общего кода? :) Вы можете принять ответ, если это вам помогло. –

0

Это своего рода такой же, как я делаю, но несколько ответов на вопрос. Но не делайте то, что говорит @RahulSingh.

Также связанный с @Chris 1 в коде. И создатель этого сообщения, я думаю, говорю, что он не хочет менять anythhing в своей функции. Единственное изменение, которое он хочет Console.WriteLine(x["1"]); или Console.WriteLine(x["2"]); получить InputValue

Reference to my post

Смежные вопросы