我正在使用EF 4.1,我的数据库中有一个存储过程,我将它映射到EF模型并添加了一个函数import
我需要做类似的事情:
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 Entities无法识别该方法 'System.Data.Objects.ObjectResult
1[System.String] GetUser(System.Nullable
1 [System.Int64])'方法,这个方法 无法翻译成商店表达。
虽然这很好用:var user = db.GetUser(1).FirstOrDefault()
编辑:
public class MyAllergy
{
public int Id { get; set; }
public string Name { get; set; }
public string User { get; set; }
}
public class Allergy
{
public int Id { get; set; }
public string Name { get; set; }
public ChangeInfo ChangeInfo { get; set; }
}
public class ChangeInfo
{
public long CreatedBy { get; set; }
}
答案 0 :(得分:0)
我有类似的问题。 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()});
}