C# EF存储过程
我正在使用EF4.1,我的数据库中有一个存储过程,我将它映射到EF模型,并添加了一个函数导入 我需要这样做:C# EF存储过程,c#,entity-framework,stored-procedures,C#,Entity Framework,Stored Procedures,我正在使用EF4.1,我的数据库中有一个存储过程,我将它映射到EF模型,并添加了一个函数导入 我需要这样做: MyDataContext db= new MyDataContext(); var x = from all in db.Allergies select new MyAllergy { Name = all.Name,
MyDataContext db= new MyDataContext();
var x = from all in db.Allergies
select new MyAllergy
{
Name = all.Name,
Id = all.Id,
user = db.GetUser(all.ChangeInfo.CreatedBy).FirstOrDefault()
};
但这一例外引发:
LINQ to实体无法识别该方法
'System.Data.Objects.ObjectResult1[System.String]
GetUser(System.Nullable
1[System.Int64])方法,以及此方法
无法转换为存储表达式
尽管这样做很好:var user=db.GetUser(1.FirstOrDefault()
编辑:
我也有类似的问题。EF基于LINQ表达式创建表达式树,但它无法转换all.ChangeInfo.CreatedBy,并将其作为字符串传递,这就是为什么会出现字符串/长表达式异常的原因 我最终要做的是预先获取all.ChangeInfo.CreatedBy值。就我而言,这更容易。在您的情况下,可以使用常规foreach循环:( 大概是这样的:
var myItems = new List<MyAllergy>();
foreach (var item in db.Allergies)
{
var createdBy = item.ChangeInfo.CreatedBy;
myItems.Add(new MyAlergy {Name = item.Name, Id = item.Id, user = db.GetUser(createdBy).FirstOrDefault()});
}
var myItems=new List();
foreach(数据库中的变量项)
{
var createdBy=item.ChangeInfo.createdBy;
添加(新的MyAlergy{Name=item.Name,Id=item.Id,user=db.GetUser(createdBy.FirstOrDefault());
}
但我不想将所有数据都存储到内存中
var myItems = new List<MyAllergy>();
foreach (var item in db.Allergies)
{
var createdBy = item.ChangeInfo.CreatedBy;
myItems.Add(new MyAlergy {Name = item.Name, Id = item.Id, user = db.GetUser(createdBy).FirstOrDefault()});
}