Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 如何向IQueryable变量添加新记录?_Linq_Iqueryable - Fatal编程技术网

Linq 如何向IQueryable变量添加新记录?

Linq 如何向IQueryable变量添加新记录?,linq,iqueryable,Linq,Iqueryable,使用LINQ从我的数据库查询IQueryable结果,如何向IQueryable结果添加新记录。您应该首先将其转换为列表 IQueryable<int> foo = new SomeQueryable<int<(); List<int> list = foo.ToList(); list.Add(5); IQueryable foo=new SomeQueryable您想将其添加到数据库中,还是仅仅添加到数据绑定等其他功能将使用的结果列表中 如果是前者,您将

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

您应该首先将其转换为列表

IQueryable<int> foo = new SomeQueryable<int<();
List<int> list = foo.ToList();
list.Add(5);

IQueryable foo=new SomeQueryable您想将其添加到数据库中,还是仅仅添加到数据绑定等其他功能将使用的结果列表中

如果是前者,您将需要对正在使用的任何类型的LINQ使用普通的add操作,但要将其添加到表表示而不是IQueryable。查询只读取数据

如果是后者,则使用将现有序列(IQueryable)与包含额外条目的新序列(此处可以使用数组或列表)连接起来,并使用结果进行绑定等。可能值得先使用AsEnumerable()以确保使用Enumerable而不是Queryable。例如:

IQueryable<string> names = [...];
names = names.AsEnumerable().Concat(new[] { "(None)", "(Add new)" });
IQueryable名称=[…];
names=names.AsEnumerable().Concat(新[]{“(无)”,“(添加新)”};

显式设置匿名类型的属性。试试这个:

dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
              select new { c.SexCode, c.SexName };
results = results.AsEnumerable().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender"} });
SelectList sliSex = new SelectList(results, "SexCode", "SexName");
编辑:您必须指出您的属性的确切类型。我的意思是如果它是int,你必须指出它是。我猜SexCode是一个“long”,默认情况下-1是一个“int”。如果将-1强制转换为long(或SexCode的类型),问题将得到解决

如果SexCode的类型很长,下面是精确的解决方案

dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
              select new { c.SexCode, c.SexName };
results = results.Concat(new[] { new { SexCode = -1L, SexName = "Please select your Gender"} });
SelectList sliSex = new SelectList(results, "SexCode", "SexName");

因为结果是不确定的,所以你应该投它

  dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
              select new { c.SexCode, c.SexName };
results = results.AsEnumerable().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender"} }).AsQueryable();
SelectList sliSex = new SelectList(results, "SexCode", "SexName");
或者没有任何铸造

结果=结果.联合(新[]{new{ SexCode=-1,SexName=“请选择 您的性别“}})


简单的答案是,除非将记录添加到iQueryTable正在查询的底层数据存储中,否则无法将新记录添加到iQueryTable中。因此,如果您使用的是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");
试试这个:

var query = from c in db.clClinics select c; 

var results = query.ToList().Concat(new clClinic[] { new clClinic()});  

这可能是一个非常古老的问题,我想在这里添加更多的解释和示例

如果使用
IQueryable
,必须首先将其转换为
IEnumerable

添加有关IEnumerable的详细信息:

实代码示例

var iquery_QRDTR = from rrp in P_QCDTR
        select new WebRequestData
        {
             ros_chk_id = rrp.CHECKIN_ID,
             ros_img = rrp.EMPLOYEE_ASSOCIATE.IMAGE_URL
        };

var enum_QRDTR = iquery_QRDTR.AsEnumerable();

enum_QRDTR = enum_QRDTR.Concat(new[] {new WebRequestData()
             {
             ros_chk_id = 16,
             ros_img = "http://link.to.image/profile.jpg" 
             } });
你可以用union

IQueryable<int> foo = new SomeQueryable<int>();
IQueryable<int> foo2 = new SomeQueryable<int>();
foo = foo.Union(foo2);
IQueryable foo=newsomequeryable();
IQueryable foo2=新的SomeQueryable();
foo=foo.Union(foo2);

但是我的IQueryable变量有两种不同的数据类型,SexCode字段是整数,SexName是字符串,因此我无法指定数据类型。请参阅我的新答案。这会有帮助的。你不能这样做:
iqeryable foo=new iqeryable()IQueryable是一个抽象类。请确保无法初始化抽象类。这是我的错。但是假设foo是一个IQueryable。我非常感谢您的帮助,但它仍然不起作用,我得到了错误消息:无法从用法推断方法“System.Linq.Enumerable.Concat,System.Collections.Generic.IEnumerable”的类型参数。请尝试显式指定类型参数。欢迎:),但我认为您忘了提供属性名称。请尝试'new[]{new{SexCode=-1,SexName=“请选择您的性别”}}'而不是'new[]{new{-1,“请选择您的性别”}'。错误提到了这一点!已尝试此方法,但仍然无效:无法从用法推断o(错误:方法'System.Linq.Enumerable.Concat(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable)'的类型参数。请尝试显式指定类型参数。您好,我刚刚更新了代码,请参阅“答案”我在上面发布了。你能粘贴你的最新代码吗?因为我对答案进行了编码,这就是我提到的。我想他忘了显式定义属性名。谢谢,但我遇到了一个新错误:方法'System.Linq.Queryable.Union(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)的类型参数无法从用法中推断。请尝试显式指定类型参数。当然,“she”也是一个选项:)请尝试显式指定类型参数。这就是确切的错误。我想你忘了。这取决于“IQueryable result”是什么。如果你正在调用
.ToList()
,你最好调用
.Add()
,而不是
.Concat()
enumResult = enumResult.Concat(new[] {new YourObject()
                 { 
                    //.... 
                 } 
             });
var iquery_QRDTR = from rrp in P_QCDTR
        select new WebRequestData
        {
             ros_chk_id = rrp.CHECKIN_ID,
             ros_img = rrp.EMPLOYEE_ASSOCIATE.IMAGE_URL
        };

var enum_QRDTR = iquery_QRDTR.AsEnumerable();

enum_QRDTR = enum_QRDTR.Concat(new[] {new WebRequestData()
             {
             ros_chk_id = 16,
             ros_img = "http://link.to.image/profile.jpg" 
             } });
IQueryable<int> foo = new SomeQueryable<int>();
IQueryable<int> foo2 = new SomeQueryable<int>();
foo = foo.Union(foo2);