在C#应用程序上工作时,遇到了一些我不太了解的事情。
我有SQL列KONTO char(15)
,它包含数字数据。
当我运行以下查询时...
select * from MyDatabase..GkKon
我得到这个结果...
那很好。
提供相同结果的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
,这似乎导致了我的问题。
是否可以使用LINQ
和EF
来做到这一点?
SQL如何做到这一点“神奇”?
答案 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();