Как получить строго типизированное одно значение с помощью LINQ - PullRequest
0 голосов
/ 26 августа 2010

Я использую LINQ для взаимодействия с данными в наборе данных в программе на C # .NET. Данные импортируются в набор данных из файла XML, так что именно там он получает свою схему. Я хочу иметь возможность взять одну строку из таблицы и затем получить доступ к определенным столбцам этой строки строго типизированным способом (с intelli-sense). Я думаю, что я близок к синтаксису, но я не совсем понимаю. Вот что у меня пока ...

// RunnerDataTable contains columns named FirstName, LastName, etc.
   var OneRunner = RunnerDataTable().Single( p => p.Field<string>("FirstName") == "Jordan");
   MessageBox.Show(OneRunner.LastName);  // This doesn't work

Этот пример работает, но я бы хотел сделать это без цикла foreach ...

var SomeRunners= from f in RunnerDataTable.AsEnumerable()
                                where f.Field<string>("FirstName") == "Jordan"
                                select new { FirstName = f.Field<string>("FirstName"), LastName = f.Field<string>("LastName")};
foreach (var o in SomeRunners)
{
    MessageBox.Show(o.FirstName + " " + o.LastName); 
}

Есть идеи?

Ответы [ 2 ]

1 голос
/ 26 августа 2010
var OneRunner = (from f in RunnerDataTable.AsEnumerable()
                 where f.Field<string>("FirstName") == "Jordan"
                 select new { FirstName = f.Field<string>("FirstName"), 
                              LastName = f.Field<string>("LastName")}
                 ).SingleOrDefault();

Заверните в парень и добавьте SingleOrDefault()

0 голосов
/ 26 августа 2010

Если я правильно понял ваш вопрос, то:

var OneRunner = (
  from f in RunnerDataTable.AsEnumerable()
  where f.Field<string>("FirstName") == "Jordan"
  select new
    {
       FirstName = f.Field<string>("FirstName"),
       LastName = f.Field<string>("LastName")
    }
 ).Single();
...