如何使用linq实体获取属性中的项目数组?

时间:2012-01-02 13:39:44

标签: c# linq linq-to-entities

考虑:

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和网站字符串?

3 个答案:

答案 0 :(得分: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

的集合

答案 1 :(得分:0)

要使用ToArray等方法,您可能需要使用ToList将所有对象加载到memery中。

答案 2 :(得分:-1)

鉴于你的评论:但我收到错误“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 []进行显式转换,这应该没问题。