Я не вижу точки в помещении анонимного пространства имен в заголовочный файл. Я захватил стандарт и libstdc ++ заголовки, не нашли анонимных пространств имен независимо одного в tuple
заголовок (C++ 1x материал):
// A class (and instance) which can be used in 'tie' when an element
// of a tuple is not required
struct _Swallow_assign
{
template
_Swallow_assign&
operator=(const _Tp&)
{ return *this; }
};
// TODO: Put this in some kind of shared file.
namespace
{
_Swallow_assign ignore;
}; // anonymous namespace
Это так, можно сделать
std::tie(a, std::ignore, b) = some_tuple;
, элементам some_tuple присваивают переменные в левой стороне (см. здесь ), подобная техника используется для этот итератор. Второй элемент проигнорирован.
, Но как они говорят, это должно быть помещено в .cpp файл, и один экземпляр должен быть совместно использован всеми пользователями. Они поместили бы объявление его в заголовок как это затем:
extern _Swallow_assign ignore;
Насколько я понимаю, я предлагаю создать класс BookData, содержащий нужные вам свойства, в данном случае Country, Code, Name и IBN.
Затем, когда вы заполнили свой DataSet с материалами Excel, создайте новый список и прокрутите DataRows в DataSet, добавив значения Excel в список.
Затем вы можете использовать Linq в списке следующим образом:
List<BookData> results = from books in bookList
where books.country == 'US'
select books;
Или что-то в этом роде. У меня нет Visual Studio, и Intellisense меня избаловал, так что да. > __>
Оформить заказ ЭТА ссылка ...... как предлагает AKofC, создание класса для хранения ваших данных будет вашим первым портом захода. В опубликованной мною ссылке есть небольшой пример той идеи, которую мы предлагаем.
Очевидная вещь, которую нужно сделать из опубликованного вами кода, - это создать новый класс для сохранить информацию о книге в.
Затем вы просто определяете, какие поля из вашего документа Excel вы хотите передать в новый экземпляр вашего класса информации о книге.
class MyBookInfo
{
public string CountryName { get; set; }
public string BookCode { get; set; }
public string BookName { get; set; }
}
public void GetMyBookInfoFromExcelDocument()
{
string filename = @"C:\\" + "Book1.xls";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + filename + ";" +
"Extended Properties=Excel 8.0;";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
DataSet myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "BookInfo");
DataTable dataTable = myDataSet.Tables["BookInfo"];
var rows = from p in dataTable.AsEnumerable()
where p[0].ToString() != null || p[0].ToString() != "" && p.Field<string>("F2") != null
select new MyBookInfo
{
CountryName = p.Field<string>("InsertFieldNameHere"),
BookCode = p.Field<string>("InsertFieldNameHere"),
BookName = p.Field<string>("InsertFieldNameHere")
};
}
Вам нужно сделать две вещи:
Во-первых, вам необходимо переформатировать электронную таблицу, чтобы в первой строке были заголовки столбцов, как показано в таблице ниже
| Country | Code | Name | IBN |
|---------|------|---------|------|
| Aust | UX | test1 | 34 |
| Aust | UZ | test2 | 345 |
| Aust | UN | test3 | 5654 |
| US | UX | name1 | 567 |
| US | TG | name2 | 123 |
| US | UM | name3 | 234 |
Во-вторых, используйте библиотеку Linq to Excel для получения данных. Он позаботится о подключении oledb и создании sql за вас. Ниже приведен пример того, насколько легко использовать библиотеку
var book = new ExcelQueryFactory("pathToExcelFile");
var australia = from x in book.Worksheet()
where x["Country"] == "Aust"
select new
{
Country = x["Country"],
BookCode = x["Code"],
BookName = x["Name"]
};
. Для получения дополнительной информации о проекте с открытым исходным кодом см. вводное видео Linq to Excel .