linq中的子串

时间:2015-08-20 13:35:25

标签: c# linq

我的数据如下所示,我想运行linq查询

MyTable
ID        DATA
1         1:40:567

我的查询是

var query = (from tab in MyTable
             where tab.DATA.Substring(0, tab.DATA.IndexOf(":")) == "1"))
             select new
             {
                tab.ID,
                tab.DATA
             }).ToList();

我收到错误

  

InnerException {"传递给LEFT或SUBSTRING函数的长度参数无效。"} System.Exception {System.Data.SqlClient.SqlException}

我想要数据列的子字符串。请帮忙

5 个答案:

答案 0 :(得分:2)

由于您只需要验证一个substring,因此请尝试使用var data= (from tab in MyTable where tab.DATA.Substring(0, 1) == "1") select new { tab.ID, tab.DATA }).ToList(); 获取一个字符,以获取示例:

<sizes type=”1”>
    <size status=”1”>L</size>
    <size status=”1”>XL</size>
   <size status=”0”>XXL</size>
<sizes>

答案 1 :(得分:1)

这应该有效:

var query = (from tab in MyTable
             where tab.DATA.TrimStart(new [] {' ', '0', '\t'}).StartsWith("1")
             select new
             {
                tab.ID,
                tab.DATA
             }).ToList();

答案 2 :(得分:1)

试试这个:

var ref = require('ref');
var StructType = require("ref-struct");
var ffi = require('ffi');

var Post = StructType({
  title: String,
  link: String,
  description: String,
});
// var vecPost = ref.refType(ref.types.Object);

var lib = ffi.Library('target/debug/libmain', {
    'get_soup': ['Vec<Post>', ['String']]
});

var posts = lib.get_soup("realtin");

答案 3 :(得分:1)

您的代码将匹配以1:开头的所有记录。如果这是你真正想要的,那么你可以这样做:

var query = (from tab in MyTable
             where tab.DATA.StartsWith("1:")
             ...

这样做的另一个好处是能够利用DATA上的索引(如果它存在)。

答案 4 :(得分:1)

试试这个

var query = (from tab in MyTable
         where tab.DATA.Split(':')[0] == "1"))
         select new
         {
            tab.ID,
            tab.DATA
         }).ToList();