如何使用 linq 从 1 行数据构建对象?

发布于 2024-09-05 22:01:36 字数 851 浏览 2 评论 0原文

我有一个快速的 linq 问题。我有一个应该返回一行数据的存储过程。我想使用 lambda 来构建一个对象。这是我目前正在做的工作,但我知道我应该能够使用 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 }

I have a quick linq question. I have a stored proc that should return one row of data. I would like to use a lambda to build an object. Here's what I'm currently doing which works, but I know I should be able to use First instead of Select except I can't seem to get the syntax correct. Can anyone straighten me out here? Thanks for any help.

 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];
                 }

Cheers,
~ck
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

扭转时空 2024-09-12 22:01:36

您不需要使用 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");
}

You don't need to use Select - since you know there is exactly 1 row, you can use it directly:

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");
}
心凉怎暖 2024-09-12 22:01:36

如果您知道您的数据始终为 1 条记录,则 .Select 就可以了。否则你无论如何都必须执行 .First().Select()

If you know your data is always 1 record, .Select is fine. Otherwise you'd have to do .First().Select() anyway.

哀由 2024-09-12 22:01:36

删除临时变量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()

:(

Dropping the temporary variable x, and the need to check for count, you can do like this:

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()

(

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文