gpt4 book ai didi

c# - LINQ to Entities 无法识别该方法,并且该方法无法转换为 store 表达式

转载 作者:行者123 更新时间:2023-12-03 14:04:07 24 4
gpt4 key购买 nike

我有以下代码使用 EF 获取所有数据,然后尝试将它们转换为模型,如下所示。

var patients = allpatients.Select(p => CreatePatient(p));

public Patient CreatePatient(PATIENT p)
{
Patient patient = new Patient();

patient.FIRSTNAME = p.FIRSTNAME;
patient.MIDDLENAME = p.MIDDLENAME;
patient.SURNAME = p.SURNAME;

return patient;
}

但是得到这个错误

"LINQ to Entities does not recognize the method 'Model.Patient CreatePatient(Repository.PATIENT)' method, and this method cannot be translated into a store expression."

最佳答案

此语句不能直接转换为任何等效的 SQL 命令:

var patients = allpatients.Select(p => CreatePatient(p));

在 LINQ to Entities(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
}

请注意,如果自定义方法成为 new 的一部分,也会发生相同的错误。 LINQ 查询中的模型分配,如下例所示:
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

关于c# - LINQ to Entities 无法识别该方法,并且该方法无法转换为 store 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com