【发布时间】:2020-09-04 22:37:27
【问题描述】:
我将应用程序的这一部分移植到使用 EF Core 检索数据库中的电子邮件模板,从 Web 表单到 .net core 3.0。我带来了下面的代码来实现这一点,所以我不必重写它,并且通过一些小的改动我让它编译,我假设相同的 linq 可以在这里工作,因为它们都是 EF。我猜不是,但我不确定从哪里开始。
public static class EmailTemplates
{
public static List<Template> GetClientEmailTemplates(Guid clientID)
{
DbContext db = new DbContext ();
var templates = (from et in db.EmailTemplates
join cet in db.ClientEmailTemplates on et.EmailTemplateID equals cet.EmailTemplateID into leftJoinedTemplates
from ljt in leftJoinedTemplates.Where(ljt => ljt.ClientID == clientID).DefaultIfEmpty()
orderby et.DisplayOrder
select new Template
{
EmailTemplateID = et.EmailTemplateID,
PreferenceID = et.PreferenceID,
Title = et.Title,
ShortTitle = et.ShortTitle,
Description = et.Description,
Subject = (ljt.Subject == null) ? et.Subject : ljt.Subject,
Body = (ljt.Body == null) ? et.Body : ljt.Body,
DisplayOrder = et.DisplayOrder,
IsDefaultTemplate = (ljt == null)
}).ToList();
List<KeyValuePair<int, string>> preferences = Preferences.GetPreferences(clientID, templates.Select(t => t.PreferenceID).ToList());
foreach (KeyValuePair<int, string> preference in preferences)
{
bool enabled = false;
try { enabled = Convert.ToBoolean(preference.Value); }
catch { }
if (!enabled) templates.Remove(templates.Where(t => t.PreferenceID == preference.Key).FirstOrDefault());
}
return templates;
}
public static Template GetClientEmailTemplate(Guid clientID, int emailTemplateID)
{
ImperiumDataContext db = new ImperiumDataContext();
var template = (from et in db.EmailTemplates
join cet in db.ClientEmailTemplates on et.EmailTemplateID equals cet.EmailTemplateID into leftJoinedTemplates
from ljt in leftJoinedTemplates.Where(ljt => ljt.ClientID == clientID).DefaultIfEmpty()
orderby et.DisplayOrder
where et.EmailTemplateID == emailTemplateID
select new Template
{
EmailTemplateID = et.EmailTemplateID,
PreferenceID = et.PreferenceID,
Title = et.Title,
ShortTitle = et.ShortTitle,
Description = et.Description,
Subject = (ljt.Subject == null) ? et.Subject : ljt.Subject,
Body = (ljt.Body == null) ? et.Body : ljt.Body,
DisplayOrder = et.DisplayOrder,
IsDefaultTemplate = (ljt == null)
}).FirstOrDefault();
if (Preferences.GetBoolPreference(clientID, template.PreferenceID))
{
return template;
}
return null;
}
}```
【问题讨论】:
标签: c# linq asp.net-core entity-framework-core