当前位置:  开发笔记 > 数据库 > 正文

如何将新记录添加到IQueryable变量?

如何解决《如何将新记录添加到IQueryable变量?》经验,为你挑选了3个好方法。

使用LINQ从我的数据库中查询IQueryable结果,如何向IQueryable结果添加新记录.



1> Jon Skeet..:

是否要将其添加到数据库中,或者只是添加到数据绑定等其他内容的结果列表中?

如果它是前者,则需要对正在使用的任何类型的LINQ使用正常的add操作,而是使用表格表示而不是IQueryable.查询仅读取数据.

如果是后者,请使用Enumerable.Concat将现有序列(IQueryable)连接到一个包含额外条目的新序列(数组在这里可以正常工作,或列表),并使用结果进行绑定等.这可能是值得的首先使用AsEnumerable()确保使用Enumerable而不是Queryable.例如:

IQueryable names = [...];
names = names.AsEnumerable().Concat(new[] { "(None)", "(Add new)" });



2> Ali Ersöz..:

你应该先把它转换成List;

IQueryable foo = new SomeQueryable list = foo.ToList();
list.Add(5);

或者使用Concat

IQueryable foo = new SomeQueryable

编辑:确定你必须重新分配foo.


你不能这样做:`IQueryable foo = new IQueryable ();`IQueryable是一个抽象类.

3> 小智..:

简单的答案是,除非将记录添加到Iqueryable正在查询的基础数据存储中,否则无法将新记录添加到IQueryable中。因此,如果您使用的是LinqToSql,则必须在IQueryable查询的表中添加一行,以便将行“添加”到IQueryable中。

请记住,IQueryable不是结果集,而是一个查询。除非使用.ToList()之类的内容,否则IQueryable不会评估结果集,更重要的是,IQueryable不会挂在该结果集上。它创建一个列表并将结果放入其中。因此,这意味着如果在Iqueryable上调用ToList()两次,它将关闭并两次查询数据库。不在乎它可能效率不高。

因此,如果您看一下上面其他人使用的示例,则将AsEnumerable()更改为ToList()的简单更改很可能会解决您的问题。

就像是:

dcDataContext db = new dcDataContext();
var query = from c in db.tblSexes
              select new { c.SexCode, c.SexName };

var results = query.ToList().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender" } });

//or even better now that it's a list
var results = query.ToList().Add(new { SexCode = -1, SexName = "Please select your Gender" });

SelectList sliSex = new SelectList(results, "SexCode", "SexName");

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有