在char列

时间:2019-11-21 14:20:43

标签: c# sql

在C#应用程序上工作时,遇到了一些我不太了解的事情。

我有SQL列KONTO char(15),它包含数字数据。 当我运行以下查询时...

select * from MyDatabase..GkKon

我得到这个结果...

enter image description here

那很好。

提供相同结果的C#代码是:

using (MyDatabaseEntities db = new MyDatabaseEntities())
{
    var data = db.GkKons.ToList();
    dataGridView1.DataSource = data;
}

当我尝试选择大于“ 01”的位置时遇到了问题

select * from MyDatabase..GkKon 
where KONTO>'01'

SQL完成了工作,我明白了

我尝试在C#中做类似的事情,但是它给了我语法错误。

using (MyDatabaseEntities db = new MyDatabaseEntities())
{
    var data = db.GkKons.Where(x=>x.KONTO>"01").ToList();
    dataGridView1.DataSource = data;
}

因为LINQ不能在两个字符串上使用“>”。 我尝试使用SqlCommand和Parameters来获取数据并且可以正常工作,但是我正在使用EF,这似乎导致了我的问题。

是否可以使用LINQEF来做到这一点? SQL如何做到这一点“神奇”?

3 个答案:

答案 0 :(得分:4)

Sql正在比较字节值字符串的合并。 在c#中,您进行的比较类似于使用方法string.Compare(s1,s2),它返回

s1==s2 returns 0  
s1>s2 returns 1  
s1<s2 returns -1  

类似这样的东西:

 var data = db.GkKons.Where(x=>string.Compare(x.KONTO,"01")==1).ToList();

或者如果您需要字符串的数字顺序,则可以将其转换为int:

 var data = db.GkKons.Where(x=>int.Parse(x.KONTO)>1).ToList();

请记住:

> string.Compare("0010", "01"); evaluates to
-1
but 
> string.Compare("10", "01"); evaluates to
1

编辑:将@Gordon Linoff的摘要更改为字节值

答案 1 :(得分:0)

尝试一下:

var data = db.GkKons.Where(x => (x.KONTO > 1)).ToList();

答案 2 :(得分:0)

使用linq: 假设字符串是字符串列表(“ 0”,“ 1”,“ 2” ....) MajorString是大于输入插入的compare方法的字符串列表。 InpuString是字符串输入,因此,比输入字符串大的每个字符串都将在majorstring列表中返回。 此外,如果第一个字符串大于第二个字符串,则compare方法返回1。 在这种情况下,输出为:{“ 2”,“ 3”}

  List<string> strings = new List<string>();
  strings.Add("0");
  strings.Add("1");
  strings.Add("2");
  strings.Add("3");
  string InputString = "1"
  List<string> MajorString = strings.Where(x => string.Compare(x, InputString ) == 1).ToList();