这是我的代码:
IEnumerable<DataAccessLayer.SQLPendingEventRecord> dataset1 = _v3Context.SQLPendingEvents
.Where(sp => sp.EventType.ToString() == str100w && sp.EventDateTime > dtStartDate && !sp.KeyDeviceID.ToString().Contains('~'))
.AsEnumerable() // further processing occurs on client
.Select((sp, index) => new DataAccessLayer.SQLPendingEventRecord
{
ID = index + 1,
KeyDeviceID=sp.KeyDeviceID,
UpdateTime=sp.UpdateTime,
EventClass=sp.EventClass,
EventCode=sp.EventCode,
EventType=sp.EventType,
EventDateTime=Convert.ToDateTime(sp.EventDateTime),
KeyPropertyID=Convert.ToInt32 (sp.KeyPropertyID),
KeyEntityID=Convert.ToInt32 (sp.KeyEntityID),
EventText=sp.EventText,
KeyUserID=sp.KeyUserID,
//sp.EventImage,
TaskType=sp.TaskType,
TaskSubType=sp.TaskSubType,
UniqueTaskID=sp.UniqueTaskID
}).ToList();
我刚刚补充说:&amp;&amp; !sp.KeyDeviceID.ToString()。包含( '〜')) 现在,我得到奇怪的错误消息:类型'System.String'不支持序列运算符。 在那之前,我没有问题。 现在,我收到这个神秘的错误消息。 由于数据库的大小,我需要将这一切都放在一个查询中。 有什么想法吗?
答案 0 :(得分:1)
我怀疑问题在于它使用Enumerable.Contains(string, char)
(因为string
实现了IEnumerable<char>
),而你真的想要string.Contains(string)
。
只需将其更改为:
!sp.KeyDeviceID.ToString().Contains("~")
可以解决问题。
请注意,如果KeyDeviceID
已经是字符串属性,我就会删除ToString()
来电:
!sp.KeyDeviceID.Contains("~")
答案 1 :(得分:0)
您使用Linq进行SQL吗? Linq to SQL不支持数据类型的所有.Net功能。您可以使用SQLFunction来复制某些功能。如果sp.KeyDeviceID不是字符串,那么如果使用Linq to SQL,则使用ToString()会抛出错误。 试试
IEnumerable<DataAccessLayer.SQLPendingEventRecord> dataset1 = _v3Context.SQLPendingEvents
.Where(sp => sp.EventType.ToString() == str100w && sp.EventDateTime > dtStartDate && !**SQLFunctions.CharIndex(sp.KeyDeviceID,"~")>0)**
.AsEnumerable() // further processing occurs on client
.Select((sp, index) => new DataAccessLayer.SQLPendingEventRecord
{
ID = index + 1,
KeyDeviceID=sp.KeyDeviceID,
UpdateTime=sp.UpdateTime,
EventClass=sp.EventClass,
EventCode=sp.EventCode,
EventType=sp.EventType,
EventDateTime=Convert.ToDateTime(sp.EventDateTime),
KeyPropertyID=Convert.ToInt32 (sp.KeyPropertyID),
KeyEntityID=Convert.ToInt32 (sp.KeyEntityID),
EventText=sp.EventText,
KeyUserID=sp.KeyUserID,
//sp.EventImage,
TaskType=sp.TaskType,
TaskSubType=sp.TaskSubType,
UniqueTaskID=sp.UniqueTaskID
}).ToList();