1. ホーム
  2. c#

[解決済み] LINQ式におけるString.IsNullOrWhiteSpaceについて

2022-04-26 13:46:45

質問

次のようなコードがあります。

return this.ObjectContext.BranchCostDetails.Where(
    b => b.TarrifId == tariffId && b.Diameter == diameter
        || (b.TarrifId==tariffId && !string.IsNullOrWhiteSpace(b.Diameter))
        || (!b.TarrifId.HasValue) && b.Diameter==diameter);

そして、そのコードを実行しようとすると、このようなエラーが発生します。

LINQ to Entitiesはメソッド'Boolean'を認識しません。 IsNullOrWhiteSpace(System.String)'メソッドで、このメソッドは使用できません。 はストア式に変換されます。

どうすればこの問題を解決して、これより良いコードを書くことができるでしょうか?

どのように解決するのか?

を置き換える必要があります。

!string.IsNullOrWhiteSpace(b.Diameter)

!(b.Diameter == null || b.Diameter.Trim() == string.Empty)

Linq to Entitiesの場合、これは次のように変換されます。

DECLARE @p0 VarChar(1000) = ''
...
WHERE NOT (([t0].[Diameter] IS NULL) OR (LTRIM(RTRIM([t0].[Diameter])) = @p0))

そして、Linq to SQLの場合は、ほとんど同じですが、全く同じではありません。

DECLARE @p0 NVarChar(1000) = ''
...
WHERE NOT (LTRIM(RTRIM([t0].[TypeName])) = @p0)