使用LINQ从我的数据库中查询IQueryable结果,如何向IQueryable结果添加新记录.
是否要将其添加到数据库中,或者只是添加到数据绑定等其他内容的结果列表中?
如果它是前者,则需要对正在使用的任何类型的LINQ使用正常的add操作,而是使用表格表示而不是IQueryable.查询仅读取数据.
如果是后者,请使用Enumerable.Concat将现有序列(IQueryable)连接到一个包含额外条目的新序列(数组在这里可以正常工作,或列表),并使用结果进行绑定等.这可能是值得的首先使用AsEnumerable()确保使用Enumerable而不是Queryable.例如:
IQueryablenames = [...]; names = names.AsEnumerable().Concat(new[] { "(None)", "(Add new)" });
你应该先把它转换成List;
IQueryablefoo = new SomeQueryable list = foo.ToList(); list.Add(5);
或者使用Concat
IQueryablefoo = new SomeQueryable 编辑:确定你必须重新分配foo.
你不能这样做:`IQueryablefoo = 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");