gpt4 book ai didi

c# - 如何取消引用 LINQ 中可能为空的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:03 24 4
gpt4 key购买 nike

假设我需要将一个对象与存储在数据库中名为 Indexes 的表中的其他对象进行比较。我需要通过对象的 X 属性进行比较,它是一个字符串,但它可能是 null

在比较之前,我还必须修整我的 comparedObject 的 X 属性。我尝试执行以下操作:

List<Guid> Ids = DataContext.Indexes.Where(ci =>
(comparedObject.X != null && ci.X != null ?
ci.X == comparedObject.X.Trim() :
(ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty))).Select(ci => ci.Id).ToList();

即使 comparedObjects.Xnull,它仍然会为 comparedObject.X.Trim() 表达式抛出空引用异常。

我假设这是由于 linq 转换造成的?

有没有更漂亮的方法来修剪 X 属性,而不必为 comparedObject.X 分配一个空字符串,以防它在查询之前为 null?

编辑:我想详细说明 - 为了简单起见,这里减少了这个查询,我还比较了大约 6 个其他属性。我想将它保留在 1 个查询中,而不是分开到 2 个仅在 X 属性上不同的查询。在查询之外进行修整是我当前的解决方案,我希望有一个语句内解决方案以防万一:)

谢谢!

最佳答案

And even though comparedObjects.X is null it still throws a null reference exception for the comparedObject.X.Trim() expression.

你最好在 linq 语句之前做一个 null 检查

if(comparedObject !=null && !string.IsNullorEmpty(comparedObject.X))
{
// your code goes here
}

下面的代码

(ci.X == null || ci.X == string.Empty) && (comparedObject.X == null || comparedObject.X == string.Empty)

可以改成

string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X)

我会如下更改代码

List<Guid> Ids = DataContext.Indexes.Where(ci =>
(string.IsNullorEmpty(ci.X) && string.IsNullorEmpty(comparedObject.X)) || ci.X == comparedObject.X.Trim())
.Select(ci => ci.Id).ToList();

关于c# - 如何取消引用 LINQ 中可能为空的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com