Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/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 对DataContext和接口的泛型函数约束使用lambda时,NotSupportedException_Linq_Generics_Delegates_Lambda_Interface - Fatal编程技术网

Linq 对DataContext和接口的泛型函数约束使用lambda时,NotSupportedException

Linq 对DataContext和接口的泛型函数约束使用lambda时,NotSupportedException,linq,generics,delegates,lambda,interface,Linq,Generics,Delegates,Lambda,Interface,我不完全确定标题的措辞是否恰当,但情况如下。。。今天,我在尝试为Linq to Sql创建一个通用保存函数时注意到,当我对数据上下文使用lambda时,会选择。它在具有另一个泛型接口的类型约束的泛型函数中中断。但是,它可以很好地使用LINQ语法。我提出这个问题或多或少是为了了解为什么会发生这种情况 引发的异常是: 不支持例外 不支持接口成员IEntity`1.ID的映射。 所涉及的代码与此类似(简化): 导致错误的函数是GenericFunc //假设SomeTable是从DBMLL2S文件生

我不完全确定标题的措辞是否恰当,但情况如下。。。今天,我在尝试为Linq to Sql创建一个通用保存函数时注意到,当我对数据上下文使用lambda时,会选择。它在具有另一个泛型接口的类型约束的泛型函数中中断。但是,它可以很好地使用LINQ语法。我提出这个问题或多或少是为了了解为什么会发生这种情况

引发的异常是:
不支持例外
不支持接口成员IEntity`1.ID的映射。

所涉及的代码与此类似(简化):
导致错误的函数是GenericFunc

//假设SomeTable是从DBMLL2S文件生成的。 //L2S类的部分扩展 公共部分类SomeTable:IEntity{} //接口公开这些实体类中的共享属性 公共接口的有效性,其中T:class { //独立应用程序,所有这些表的int主键。 int ID{get;set;} } //简单的L2S助手类。 公共类存储库 { //用于插入/更新数据的帮助程序。。 公共void SaveSomeTable(SomeTable数据) { SomeDataContext db=新的SomeDataContext(); GenericFunc(db.SomeTables,data); } //本例中的toy函数 public void GenericFunc(System.Data.Linq.Table Table,T Data),其中T:class,IEntity,new() { //请注意泛型类型约束。。。 //在这种情况下,所有表实体都符合IEntity类。 //中断 var row=table.SingleOrDefault(o=>o.ID==data.ID); //工作 var row1=(来自表中的项,其中item.ID==data.ID选择项); //…更多的东西。 } }
这不是一个真正的lambda问题。以下是非查询语法,也可以使用:

var row1 = table.Where(o => o.ID == data.ID)
                .SingleOrDefault();
基本上,它编译为与查询表达式相同的代码


我强烈怀疑是
SingleOrDefault
(内部)的不同代码路径导致了问题。

doh!哈!我甚至没有注意到我在做那件事。我在拿苹果和桔子作比较。无论如何,很奇怪SingleOrDefault的谓词会导致这个问题。我认为你是对的,它是这个函数的内部。谢谢
var row1 = table.Where(o => o.ID == data.ID)
                .SingleOrDefault();