【问题标题】:get array values using Linq (LinqPad)使用 Linq (LinqPad) 获取数组值
【发布时间】:2016-09-29 03:28:18
【问题描述】:

我有以下数组和 Linq 语句。我可以使用 Linq 获取字段名称,但是如何检索字段值? (在 LinqPad 中)

var source = new[] {
   new { FirstName = "Foo", SurName = "Bar", Password = "secret" },
};

var membersToInclude =
   source
      .First()
      .GetType()
      .GetProperties()
      .Where(x => x.Name != "Password")
      .Select(x => x.Name)
      .ToArray();

foreach (var m in membersToInclude)
{
   m.Dump();
}

Dump() 只显示单词 -- FirstName, SurName -- 我怎样才能获得这些值——Foo 和 Bar?

当我在做这件事时(好吧,我在一篇文章中问了 2 个问题——但是....它们都与 linq --LinqPad 相关)你如何使用 Linq 获得字符串长度(嗯,LinqPad)

 from w in Albums.Take(5)
     select new
     {
        w1 = w.AlbumArtUrl.Substring(1,5),
        w2 = w.AlbumArtUrl.Length
     }

Substring 函数工作正常,但是当我尝试获取 Length 时,LinqPad 给了我这个消息

为函数指定的参数值无效。 [ 参数 # = 1,函数名称(如果已知) = LEN ]

我试过用len,LEN,...如何得到字符串长度值?

【问题讨论】:

  • 第二个是 LINQ to Entities,对吧?
  • 请坚持每个帖子一个问题。

标签: c# linq


【解决方案1】:

您选择的只是属性名称。您需要将其应用于对象以获取值。这应该会给你一个想法:

var source = new[] {
   new { FirstName = "Foo", SurName = "Bar", Password = "secret" },
};

var membersToInclude =
   source
      .First()
      .GetType()
      .GetProperties()
      .Where(x => x.Name != "Password")
      .Select(x =>
          {
            var value = x.GetValue(source.First());
            return new {x.Name,  value};
          })
      .ToArray();

foreach (var m in membersToInclude)
{
   m.Dump();
}

【讨论】:

  • 非常感谢 --- GetValue -- 这就是我所缺少的。是的,对象方法。现在工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2018-12-19
  • 2012-10-25
  • 2011-06-03
相关资源
最近更新 更多