这种说法不能直接翻译成任何等价的SQL命令:
var patients = allpatients.Select(p => CreatePatient(p));
使用LINQ中的自定义扩展方法实体(EF数据上下文)常用的方法是先在模型上进行查询(其能够被翻译成SQL语句),然后使用自定义扩展方法以外查询上下文(这只是一个例子):
var patients = allpatients.Select(p => new Patient()
{
FIRSTNAME = p.FIRSTNAME,
MIDDLENAME = p.MIDDLENAME,
SURNAME = p.SURNAME
});
foreach (Patient pt in patients)
{
// iterate through Patient collection
// use your custom method here
}
注意,相同的错误也会发生如果自定义方法变得LINQ查询内部的new
模型分配像本实施例中的一部分:
var patients = allpatients.Select(p => new Patient()
{
PATIENTID = ToInt32(p.PATIENTID), // ToInt32 is a custom extension method, e.g. converting string to int
FIRSTNAME = p.FIRSTNAME,
MIDDLENAME = p.MIDDLENAME,
SURNAME = p.SURNAME
});
这是上述使用的正确的方法:
var patients = allpatients.Select(p => new Patient()
{
PATIENTID = p.PATIENTID, // leave the selected property as-is
FIRSTNAME = p.FIRSTNAME,
MIDDLENAME = p.MIDDLENAME,
SURNAME = p.SURNAME
});
// another method content
foreach (Patient pt in patients)
{
other.PATIENTID = ToInt32(pt.PATIENTID);
}
参考:
LINQ to Entities does not recognize the method
我可以,但我尝试使用Model Factory,并将创建方法移动到另一个类。我试图理解为什么错误。 – Simsons
错误只是告诉'CreatePatient'方法不能被翻译成SQL语句,你需要把它放在查询语境之外。 –