【问题标题】:How to i get array of items in properties with linq to entities?如何使用 linq 到实体获取属性中的项目数组?
【发布时间】:2012-01-02 13:39:44
【问题描述】:

考虑:

class Foo
{
    public string Name{get;set;}
    public string[] WebSites{get;set;}
}

我有一个问题:

var allFoo=db.Persons.Select(p=>new Foo()
{
    Name=p.Name,
    WebSites=p.WebSites.Select(q=>q.Caption).ToArray(),
}).ToList();

但我收到错误“LINQ to Entities 无法识别方法 'System.String[] ToArray...”。

如何通过 linq 到实体的数组中获取所有 foo 和网站字符串?

【问题讨论】:

标签: c# linq linq-to-entities


【解决方案1】:

这样的事情应该可以工作:

var allFooAnon = db.Persons.Select(p => new
{
  Name = p.Name,
  Websites = p.Websites.Select(q => q.Caption)
});

var list = new List<Foo>();
foreach (var anon in allFooAnon)
{
  list.Add(new Foo
  {
    Name = anon.Name,
    Websites = anon.Websites.ToArray()
  });
}

这会创建一组匿名类型的对象来保存查询结果。然后,您可以遍历这些对象以创建您的 Foo 集合。

【讨论】:

    【解决方案2】:

    要使用像ToArray 这样的方法,您可能必须使用ToList 将所有对象加载到内存中。

    【讨论】:

      【解决方案3】:

      鉴于您的评论:但我收到错误“LINQ to Entities 无法识别方法 'System.String[] ToArray..

      我建议从

      中剥离 .ToArray()
      WebSites=p.WebSites.Select(q=>q.Caption).ToArray(), 
      

      因为显然是

      的结果
      p.WebSites.Select(q=>q.Caption) is a System.String[]
      

      这仅意味着您将执行从 System.String[] 到 string[] 的显式转换,这应该没问题。

      【讨论】:

      • -1: p.WebSites.Select(q=&gt;q.Caption) 的类型为 IEnumerable&lt;string&gt;
      猜你喜欢
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多