如何使用 linq 到实体获取属性中的项目数组?
Posted
技术标签:
【中文标题】如何使用 linq 到实体获取属性中的项目数组?【英文标题】:How to i get array of items in properties with linq to entities? 【发布时间】:2012-01-02 13:39:44 【问题描述】:考虑:
class Foo
public string Nameget;set;
public string[] WebSitesget;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 和网站字符串?
【问题讨论】:
你能显示你的 Persons 类的定义吗? 可能有用social.msdn.microsoft.com/Forums/en/adodotnetentityframework/… 【参考方案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=>q.Caption)
的类型为 IEnumerable<string>
以上是关于如何使用 linq 到实体获取属性中的项目数组?的主要内容,如果未能解决你的问题,请参考以下文章