【问题标题】:String comparison working on DBSet but not on LIST item in C#字符串比较适用于 DBSet 但不适用于 C# 中的 LIST 项
【发布时间】:2016-08-16 14:21:33
【问题描述】:

在我们的 C# 应用程序中,我们需要比较 GUID,在数据库中它是大写的,但假设在代码中它是小写的。

我知道我们可以通过 string.Compare 或 string.Equals 来处理这个问题,但我想了解以下情况。

var myInstanceId ='GUID';

下面的线做完美的比较,

var applicationSettings = db.ApplicationSettingsSet
  .Where(x => x.myInstanceId == myInstanceId).ToList();

可能是由于 db.ApplicationSettingsSet 是 EF DB 实体

  public DbSet<ApplicationSetting> ApplicationSettingSet { get; set; }

但不知何故,下面的代码在哪里不起作用

applicationSettingCategory.ApplicationSettings = applicationSettings
  .Where(x =>  x.myInstanceId == myInstanceId );

可能是因为现在比较发生在 ApplicationSettings 的 LIST 而不是 DBSet 上。

这种行为的真正原因是什么?

【问题讨论】:

  • KcsInstanceId的数据类型是什么,是GUID吗?
  • 可能您的数据服务器不区分大小写。如果您使用的是 Sql Server,那就是问题所在。
  • 只要都是Guid类型,就不用担心数据转换了
  • @Habib 是的,但我们将其转换为字符串
  • @Kcsss,所以在 EF6 查询中,您正在比较 Guid,而在另一个查询中,您正在比较字符串?

标签: c# asp.net .net entity-framework c#-4.0


【解决方案1】:

这个是linq to sql:

var applicationSettings = db.ApplicationSettingsSet.Where(x => x.myInstanceId == myInstanceId).ToList();

将比较语句转换为 SQL,并在数据库中进行实际比较。根据数据库是否区分大小写,它可以更改,所以我假设您的数据库不区分大小写。

这是对对象的 linq:

applicationSettingCategory.ApplicationSettings = applicationSettings.Where(x =>  x.myInstanceId == myInstanceId );

在这里您必须指定比较不区分大小写,例如 String.Equals

【讨论】:

  • 谢谢 :) 这是我唯一想确定的关于@Mateusz 的事情
猜你喜欢
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2017-01-06
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2019-04-23
相关资源
最近更新 更多