我不确定这是不是一个错误,但是我遇到了错误而且我没有看到原因是什么。我有一个方法,接受一个带有查询参数的参数。
public static List<EmailNotification> GetEmailNotifications (EmailNotificationQuery query)
{
using (HalDataContext hal = new HalDataContext())
{
IQueryable<EmailNotification> emailNotifications = hal.EmailNotifications;
if (query.EmailNotificationID != null)
{
emailNotifications = emailNotifications.Where(en => en.EmailNotificationID == query.EmailNotificationID);
}
if (query.EmailNotificationIDs.Count > 0)
{
emailNotifications = emailNotifications.Where(en => en.EmailNotificationID.In(query.EmailNotificationIDs));
}
if (query.EmailNotificationTemplateID != null)
{
emailNotifications = emailNotifications.Where(en => en.EmailNotificationTemplateID == query.EmailNotificationTemplateID);
}
//this was causing error!!!!!!!!!!!!!!!!
if (query.EmailNotificationTemplateIDs.Count > 0)
{
emailNotifications = emailNotifications.Where(en => en.EmailNotificationTemplateID.In(query.EmailNotificationTemplateIDs);
}
return emailNotifications.ToList();
}
}
查询类
public class EmailNotificationQuery
{
public EmailNotificationQuery ()
{
EmailNotificationIDs = new List<int>();
}
public List<int> EmailNotificationIDs { get; set; }
public int? EmailNotificationID { get; set; }
public int? EmailNotificationTemplateID { get; set; }
public List<int> EmailNotificationTemplateIDs { get; set; }
}
当我调用类似下面的方法时,LINQ会出错。
emailNotifications = EmailNotification.GetEmailNotifications(
new EmailNotificationQuery() { EmailNotificationTemplateIDs = new List<int>
{(int)HalTypes.EmailNotificationType.EmployeeAddedToTask,
(int)HalTypes.EmailNotificationType.EmployeeRemovedFromTask} });
如果我没有内联定义列表,那么查询将起作用,但是当它被内联定义时,它会引发以下错误:
方法'布尔在[Int32]中(Int32, System.Collections.Generic.IEnumerable`1 [System.Int32])'没有 支持转换为SQL。
这是一个LINQ错误,还是我错过了什么?提前感谢您的帮助。
答案 0 :(得分:4)
错误消息为您提供所需的信息。
Method 'Boolean In[Int32](Int32, System.Collections.Generic.IEnumerable`1[System.Int32])' has no supported translation to SQL.
LINQ正在尝试创建一个SQL语句以匹配您提供的指令,但是在In方法上遇到了阻塞,我假设它是您在
上定义的扩展方法Nullable<int>
尝试改为:
emailNotifications = emailNotifications.Where(en => query.EmailNotificationTemplateIDs.Contains(en.EmailNotificationTemplateID));
编辑:如果您还没有使用它,LinqPad是调试LINQ查询的好方法。根本不隶属于它,只是一个快乐的用户。