0

我只想从字符串中选择具有字段“1”的记录eventTriggers(看起来像这样:“00100010”)

我已经尝试并成功完成了超过 1 个电话.. 但我怀疑它的效率。基本上我想要这样的东西......但显然LINQ不支持这个。
( LINQ to Entities does not recognize the method 'Char get_Chars(Int32)' method, and this method cannot be translated into a store expression.)

     using (var service = new dB.Business.Service.BaseBusinessService<memo>())
   {
      List<memo> result = service.Repository.GetQuery().Where(p => p.ID == ID && p.eventTriggers[index] == '1').ToList();
   }

对正确解决方案的任何提示?谢谢 !

4

3 回答 3

2

我有同样的问题并用子字符串解决了它。

ervice.Repository.GetQuery().Where(p => p.ID == ID && p.eventTriggers.Substring(index,1) == "1").ToList();
于 2015-12-05T22:22:28.387 回答
1

EF 无法将 char 数组操作转换为有效查询。怎么样

IEnumerable<Memo> memos
using (var service = new dB.Business.Service.BaseBusinessService<Memo>())
{
    memos = service.Repository.GetQuery()
                    .Where(p => p.ID == ID).AsEnumerable();
}

var result = memos.Where(m => m.eventTriggers[index] == '1').ToList();

这会在本地获取所有具有匹配 ID 的备忘录,然后在 eventTriggers 数组上进行过滤。


或者,您可以将 eventTriggers 转换为数值并使用位掩码,这可能是一个更快的查询。

Linq看起来像这样,

using (var service = new dB.Business.Service.BaseBusinessService<Memo>())
{
    result = service.Repository.GetQuery()
                 .Where(p => 
                         p.ID == ID
                     &&
                         m.eventTriggers & mask != 0).ToList();
}

更多例子在这里

于 2012-10-03T10:44:13.360 回答
0

解决了:

using (var service = new dB.Business.Service.BaseBusinessService<memo>())
   {
      List<memo> result = service.Repository.GetQuery().Where(p => p.ID == ID && p.eventTriggers.Contains('1')).ToList();
   }
于 2018-08-30T05:44:40.183 回答