Как я могу использовать linq для создания объекта из 1 строки данных? - PullRequest
1 голос
/ 17 июня 2010

У меня быстрый вопрос linq.У меня есть сохраненный процесс, который должен вернуть одну строку данных.Я хотел бы использовать лямбду для создания объекта.Вот то, что я сейчас делаю, и это работает, но я знаю, что должен иметь возможность использовать First вместо Select, за исключением того, что не могу получить правильный синтаксисКто-нибудь может выправить меня здесь?Спасибо за любую помощь.

 var location = new GeoLocationDC();
 DataSet ds = db.ExecuteDataSet(dbCommand);
 if(ds.Tables[0].Rows.Count == 1)
            {
                 var rows = ds.Tables[0].AsEnumerable();
                 var x = rows.Select(
                     c => new GeoLocationDC
                              {
                                  Latitude = Convert.ToInt32(c.Field<string>("LATITUDE")),
                                  Longitude = Convert.ToInt32(c.Field<string>("LONGITUDE"))
                              }).ToList();
                 if(x.Count > 0 )
                 {
                     location = x[0];
                 }

Приветствия, ~ ck}

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

Вам не нужно использовать Select - поскольку вы знаете, что ровно 1 строка, вы можете использовать ее напрямую:

var location = new GeoLocationDC();
var ds = db.ExecuteDataSet(dbCommand);

if(ds.Tables[0].Rows.Count == 1)
{
    var row = ds.Tables[0].AsEnumerable().Single();

    location.Latitude = row.Field<int>("LATITUDE");
    location.Longitude = row.Field<int>("LONGITUDE");
}
1 голос
/ 17 июня 2010

Отбрасывание временной переменной x и необходимость проверки на счетчик можно сделать так:

var location = rows.Select(c => new GeoLocationDC
    {
        Latitude = Convert.ToInt32(c.Field<string>("LATITUDE")),
        Longitude = Convert.ToInt32(c.Field<string>("LONGITUDE"))
    }).First(); //or better yet, use FirstOrDefault()

(

1 голос
/ 17 июня 2010

Если вы знаете, что ваши данные всегда 1 запись, .Select хорошо. В противном случае вам все равно придется сделать .First().Select().

...