LINQ to Entities无法识别方法'Char get_Chars(Int32)'方法,并且此方法无法转换为存储表达式

时间:2012-10-03 10:01:36

标签: linq linq-to-entities

我想只选择字符串eventTriggers中包含字段“1”的记录(看起来像这样:“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();
   }

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

3 个答案:

答案 0 :(得分: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();
}

more exapmles here

答案 1 :(得分:1)

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

ervice.Repository.GetQuery().Where(p => p.ID == ID && p.eventTriggers.Substring(index,1) == "1").ToList();

答案 2 :(得分:0)

已解决:

//when user pick an image from local storage
ImagePicker.showImagePicker(options, (response) => {
  if (response.didCancel) {
    console.log('User cancelled photo picker');
  }
  else if (response.error) {
    console.log('ImagePicker Error: '+response.error);
  }
  else if (response.customButton) {
    console.log('User tapped custom button: '+response.customButton);
  }
  else {
    firebase.storage().ref().child('myimg.jpg')
    .put(response.uri, { contentType : 'image/jpeg' }) //--> here just pass a uri
    .then((snapshot) => {
      console.log(JSON.stringify(snapshot.metadata));
    })
  });
}