www.91084.com

GVKun编程网logo

如何在ef core 2中包含不区分大小写的内容?(ef core dbfirst)

15

对于想了解如何在efcore2中包含不区分大小写的内容?的读者,本文将提供新的信息,我们将详细介绍efcoredbfirst,并且为您提供关于C#WinForm登录界面的图片验证码(区分大小写+不区分

对于想了解如何在ef core 2中包含不区分大小写的内容?的读者,本文将提供新的信息,我们将详细介绍ef core dbfirst,并且为您提供关于C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)、java – 不区分大小写的排序集 – 保持不同大小写的相同字符串、java – 如何在Oracle 10gR2和JPA中做一个不区分大小写和不区分大小写的操作?、java – 获取文件区分大小写的名称,不区分大小写拼写的有价值信息。

本文目录一览:

如何在ef core 2中包含不区分大小写的内容?(ef core dbfirst)

如何在ef core 2中包含不区分大小写的内容?(ef core dbfirst)

我正在尝试通过搜索字符串过滤列表。它在文档的蓝色注释上说:

  • IQueryable为您提供的数据库提供程序实现Contains
  • IEnumerable 为您提供.NET Framework的实现 Contains
  • SQL Server实例的默认设置不区分大小写。
  • ToUpper应该避免使用它来进行不区分大小写的显式调用,因为这会降低性能。

我的过滤如下:

IQueryable<ApplicationUser> customers =     from u in _context.Users    where (u.Customer != null && u.IsActive)    select u;if (!string.IsNullOrEmpty(searchString)){    customers = customers.Where(s => s.Email.Contains(searchString));}

但是,该解决方案区分大小写,我也不十分清楚为什么:因为我正在使用IQueryable,所以它应该使用数据库提供程序实现,默认情况下不区分大小写,对吗?

我正在使用EF Core 2,当前仅运行本地MSSQLLocalDB。

答案1

小编典典

从EF Core 2.1版开始,您可以使用HasConversion()。但是数据库中的信息将以小写形式存储:

builder.Property(it => it.Email).HasConversion(v => v.ToLowerInvariant(), v => v);

我解决了类似的问题。这项更改解决了我所有的问题。

C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)

C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)

一、功能界面

图1 验证码(区分大小写)

图2 验证码(不区分大小写)

二、创建一个产生验证码的类Class1

(1)生成随机验证码字符串,用的是Random随机函数
(2)创建验证码图片,将该字符串画在PictureBox控件中

Class1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;//图片
using System.Windows.Forms;

namespace ValidCodeTest
{
  public class Class1
  {
    #region 验证码功能      
    /// <summary>
    /// 生成随机验证码字符串
    /// </summary>
    public static string CreateRandomCode(int CodeLength) 
    {
      int rand;
      char code;
      string randomCode = String.Empty;//随机验证码
     	
     	//生成一定长度的随机验证码    
      //Random random = new Random();//生成随机数对象
      for (int i = 0; i < CodeLength; i++)
      {
        //利用GUID生成6位随机数   
        byte[] buffer = Guid.NewGuid().ToByteArray();//生成字节数组
        int seed = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字节数组转换为整数
        Random random = new Random(seed);//以生成的整数作为随机种子
        rand = random.Next();

        //rand = random.Next();   
        if (rand % 3 == 1)
        {
          code = (char)(''A'' + (char)(rand % 26));
        }
        else if (rand % 3 == 2)
        {
          code = (char)(''a'' + (char)(rand % 26));          
        }
        else
        {
          code = (char)(''0'' + (char)(rand % 10));
        }
        randomCode += code.ToString();
      }
      return randomCode;
    }

    /// <summary>
    /// 创建验证码图片
    /// </summary>
    public static void CreateImage(string strValidCode, PictureBox pbox)
    {
      try
      {
        int RandAngle = 45;//随机转动角度
        int MapWidth = (int)(strValidCode.Length * 21);
        Bitmap map = new Bitmap(MapWidth, 28);//验证码图片—长和宽

				//创建绘图对象Graphics
        Graphics graph = Graphics.FromImage(map);
        graph.Clear(Color.AliceBlue);//清除绘画面,填充背景色
        graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框
        graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
        Random rand = new Random();
        //背景噪点生成
        Pen blackPen = new Pen(Color.LightGray, 0);
        for (int i = 0; i < 50; i++)
        {
          int x = rand.Next(0, map.Width);
          int y = rand.Next(0, map.Height);
          graph.DrawRectangle(blackPen, x, y, 1, 1);
        }
        //验证码旋转,防止机器识别
        char[] chars = strValidCode.ToCharArray();//拆散字符串成单字符数组
        //文字居中
        StringFormat format = new StringFormat(StringFormatFlags.NoClip);
        format.Alignment = StringAlignment.Center;
        format.LineAlignment = StringAlignment.Center;
        //定义颜色
        Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
        //定义字体
        string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
        for (int i = 0; i < chars.Length; i++)
        {
          int cindex = rand.Next(7);
          int findex = rand.Next(5);
          Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
          Brush b = new System.Drawing.SolidBrush(c[cindex]);
          Point dot = new Point(16, 16);

          float angle = rand.Next(-RandAngle, RandAngle);//转动的度数
          graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置
          graph.RotateTransform(angle);
          graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);

          graph.RotateTransform(-angle);//转回去
          graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置
        }
        pbox.Image = map;
      }
      catch (ArgumentException)
      {
        MessageBox.Show("验证码图片创建错误");
      }
    }
    #endregion
  }
}

三、调用

(1)更新验证码
(2)验证(区分大小写)
(3)验证(不区分大小写)

Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ValidCodeTest;

namespace ValidCode
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }


    #region 验证码
    private const int ValidCodeLength = 4;//验证码长度    
    private String strValidCode = "";//验证码            

    //调用自定义函数,更新验证码
    private void UpdateValidCode()
    {
      strValidCode = Class1.CreateRandomCode(ValidCodeLength);//生成随机验证码
      if (strValidCode == "") return;
      Class1.CreateImage(strValidCode, pbox1);//创建验证码图片
    }
    #endregion


    private void pbox1_Click(object sender, EventArgs e)
    {
      UpdateValidCode();//点击更新验证码
    }


    private void Form1_Load(object sender, EventArgs e)
    {
      UpdateValidCode();//加载更新验证码
    }


    /// <summary>
    /// 验证(区分大小写)
    /// </summary>    
    private void btn1_Click(object sender, EventArgs e)
    {
      string validcode = txtValidCode.Text.Trim();

      char[] ch1 = validcode.ToCharArray();
      char[] ch2 = strValidCode.ToCharArray();
      int Count1 = 0;//字母个数
      int Count2 = 0;//数字个数

      if (String.IsNullOrEmpty(validcode) != true)//验证码不为空
      {
        for (int i = 0; i < strValidCode.Length; i++)
        {
          if ((ch1[i] >= ''a'' && ch1[i] <= ''z'') || (ch1[i] >= ''A'' && ch1[i] <= ''Z''))//字母
          {
            if (ch1[i] == ch2[i])
            {
              Count1++;
            }
          }
          else//数字
          {
            if (ch1[i] == ch2[i])
            {
              Count2++;
            }
          }

        }

        int CountSum = Count1 + Count2;
        if (CountSum == strValidCode.Length)
        {
          MessageBox.Show("验证通过", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
          UpdateValidCode();
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
        else
        {
          MessageBox.Show("验证失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          UpdateValidCode();//更新验证码
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
      }
      else//验证码为空
      {
        MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        UpdateValidCode();//更新验证码
        txtValidCode.Text = "";
        txtValidCode.Focus();
      }
    }


    /// <summary>
    /// 验证(不区分大小写)
    /// </summary> 
    private void btn2_Click(object sender, EventArgs e)
    {
      string validcode = txtValidCode.Text.Trim();

      if (String.IsNullOrEmpty(validcode) != true)//验证码不为空
      {
        if (validcode.ToLower() == strValidCode.ToLower())
        {
          MessageBox.Show("验证通过", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
          UpdateValidCode();
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
        else
        {
          MessageBox.Show("验证失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
          UpdateValidCode();//更新验证码
          txtValidCode.Text = "";
          txtValidCode.Focus();
        }
      }
      else//验证码为空
      {
        MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        UpdateValidCode();//更新验证码
        txtValidCode.Text = "";
        txtValidCode.Focus();
      }
    }
  }
}

.exe测试文件下载: ValidCode_jb51.zip

参考文章:
https://www.jianshu.com/p/d89f22cf51bf

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • C# winform主界面打开并关闭登录界面的方法
  • C# WinForm制作登录界面的实现步骤

java – 不区分大小写的排序集 – 保持不同大小写的相同字符串

java – 不区分大小写的排序集 – 保持不同大小写的相同字符串

今天我有一个不区分大小写的排序集,如:

Set<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
set.add("foo");
set.add("FOO");
set.add("bar");
System.out.println(set.toString());

这个输出是:

[bar,foo]

但我真正想要的是:

[bar,FOO,foo]

也就是说,我希望对集合的排序不区分大小写,但我希望能够在集合中使用具有不同情况的相同字符串(如“foo”和“FOO”),而不丢弃最后一个.

我知道我可以对List进行排序,但在我的情况下我需要一个Set.

在Java中有这样一种巧妙的方法吗?

解决方法

您可能希望使用不区分大小写的比较器,然后使用区分大小写的顺序作为决胜局.

所以类似于:

Set<String> set = new TreeSet<>((a,b) -> {
    int insensitive = String.CASE_INSENSITIVE_ORDER.compare(a,b);
    return insensitive==0 ? a.compareto(b) : insensitive;
});

java – 如何在Oracle 10gR2和JPA中做一个不区分大小写和不区分大小写的操作?

java – 如何在Oracle 10gR2和JPA中做一个不区分大小写和不区分大小写的操作?

在J2EE项目中,使用JPA,如何强制类似查询不区分大小写,并且不区分大小写?

我知道更改会话变量NLS_COMP和NLS_SORT,但我想知道在查询本身是否有另一个窍门,而不改变会话变量

解决方法

原来,你可以做一些类似的事情
select  upper(convert('This is a têst','US7ASCII')),upper(convert('THIS is A test','US7ASCII'))
from dual;

select  1 from dual 
where upper(convert('This is a têst','US7ASCII')) =
             upper(convert('THIS is A test','US7ASCII'))

CONVERT将重音字符减少到映射的ASCII等价物,而UPPER将小写字母强制为大写.所得到的字符串应该是匹配的.

java – 获取文件区分大小写的名称,不区分大小写拼写

java – 获取文件区分大小写的名称,不区分大小写拼写

我正在创建一个用户从中选择文件的应用程序:

FilePicker.PickFile(文件名)

其中filename是一个字符串.

在该方法中,它将转换为:

文件文件=新文件(文件名);

这并没有错.接下来,我做,

if(file.exists()){
    System.out.println(file.getName());
}
else{
    System.out.println("Fail.");
}

这就是问题的开始.我想得到文件的名称,比如说“HELLO.txt”,但如果filename是“hello.txt”,它仍会传递file.exists()检查,而file.getName()则返回“hello.txt”,“不是”HELLO.txt“.有没有办法,将file.getName()作为区分大小写的版本返回为“HELLO.txt?”谢谢!

一个例子:

HELLO.txt是真实的文件

FilePicker.PickFile( “hello.txt的”);

OUTPUT:

hello.txt的

解决方法

当您使用Windows(保留大小写(fat32 / NTFS / ..))时,可以使用 file.getCanonicalFile().getName()来获取所选文件的规范名称.

当您使用Linux或Android并且想要根据不一定匹配大小写的文件名选择文件时,遍历文件目录(file.getParent())中的所有文件,并选择.equalsIgnoreCase文件名.或者见Case-insensitive File.equals on case-sensitive file system

我们今天的关于如何在ef core 2中包含不区分大小写的内容?ef core dbfirst的分享就到这里,谢谢您的阅读,如果想了解更多关于C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)、java – 不区分大小写的排序集 – 保持不同大小写的相同字符串、java – 如何在Oracle 10gR2和JPA中做一个不区分大小写和不区分大小写的操作?、java – 获取文件区分大小写的名称,不区分大小写拼写的相关信息,可以在本站进行搜索。

本文标签: