如何初始化为空的IEnumerable <Object>并允许Concat到它?

Maj*_*jid 30 c# linq linq-to-entities concatenation argumentnullexception

我尝试使用此代码添加bbooks:

IEnumerable<Book> books =null;
foreach (Book b in context.Books.AsEnumerable())
    if (someConditions)
       books = books.Concat(new[] {b});
Run Code Online (Sandbox Code Playgroud)

但在最后一行代码中给出了这个错误:

System.ArgumentNullException:值不能为null.参数名称:首先

似乎null Collection无法连接.我使用EF,所以我应该如何初始化我Collection没有东西,我可以连接到它?

Rod*_*pez 73

它接缝你要做的就是过滤你的context.Books按一些标准.

IEnumerable<Book> books = context.Books.Where(b => someConditions);
Run Code Online (Sandbox Code Playgroud)

如果你仍然需要空的IEnumerable,你可以调用Enumerable.Empty():

IEnumerable<Book> books = Enumerable.Empty<Book>();
Run Code Online (Sandbox Code Playgroud)


小智 23

IEnumerable<Book> books = new List<Book>();
Run Code Online (Sandbox Code Playgroud)


Ano*_*ken 5

这就是您正在尝试做的事情:

IEnumerable<Book> books = Enumerable.Empty<Book>();
books = books.Concat(context.Books.AsEnumerable().Where(b => someCondition));
Run Code Online (Sandbox Code Playgroud)

或者,如果您想从 null 开始,您可以这样做:

IEnumerable<Book> books = null;
var moreBooks = context.Books.AsEnumerable().Where(b => someCondition);
books = books == null ? moreBooks : books.Concat(moreBooks);
Run Code Online (Sandbox Code Playgroud)

...虽然我有几个问题关于为什么你想要/需要这样做。