E.F。带有 StartsWith 的 List<string> 的 lambda 表达式
E.F. lambda expression for a List<string> with StartsWith
我正在使用 .NET Framework 4.5.1 和 C# 开发 Entity Framework 6.1.2 库。
我有这个谓词:
Expression<Func<EXTERNAL_CODES, bool>> predicate = null;
List<string> codes = GetStartEntCodes(startingCode, quantity);
predicate = (e =>
e.USED == 0
&& codes.Contains(e.CODE)
&& e.CHINA_CODES_HEADER_ID == batch.Id
&& e.CODE_LEVEL == codeLevel
&& (e.BATCH_ID == batch.Id || e.BATCH_ID == null));
但这部分&& chinaCodes.Contains(e.CODE)
不起作用。
e.CODE
是 nvarchar(20) 并且 codes
列表中的每个字符串仅包含前 15 个字符。
我想这样做:
`WHERE CODE LIKE `codes.value%'; -- Note: `codes.value%' represents each value in codes list.`
我该怎么做?
您可以尝试类似的方法:
predicate = (e =>
e.USED == 0
&& codes.Any(x => x.StartsWith(e.CODE))
&& e.CHINA_CODES_HEADER_ID == batch.Id
&& e.CODE_LEVEL == codeLevel
&& (e.BATCH_ID == batch.Id || e.BATCH_ID == null));
chinaCodes.Contains(e.CODE)
你要区分String.Contains()
和IEnumerable<T>.Contains()
。
在字符串上,该方法将return是否字符串的某些部分是否包含您给定的参数。 (这就是你想要的)
在一个集合上,该方法将return集合是否包含一个完全相似的元素(不仅仅是它的一部分!)。
您需要检查 (1) 您的代码是否以 (2) 列表中的任何代码开头.
这是正确的 LINQ 语句:
chinaCodes.Any(x => e.CODE.StartsWith(x) )
编辑我最初误解了你的问题,但已经更正了我的答案。
我正在使用 .NET Framework 4.5.1 和 C# 开发 Entity Framework 6.1.2 库。
我有这个谓词:
Expression<Func<EXTERNAL_CODES, bool>> predicate = null;
List<string> codes = GetStartEntCodes(startingCode, quantity);
predicate = (e =>
e.USED == 0
&& codes.Contains(e.CODE)
&& e.CHINA_CODES_HEADER_ID == batch.Id
&& e.CODE_LEVEL == codeLevel
&& (e.BATCH_ID == batch.Id || e.BATCH_ID == null));
但这部分&& chinaCodes.Contains(e.CODE)
不起作用。
e.CODE
是 nvarchar(20) 并且 codes
列表中的每个字符串仅包含前 15 个字符。
我想这样做:
`WHERE CODE LIKE `codes.value%'; -- Note: `codes.value%' represents each value in codes list.`
我该怎么做?
您可以尝试类似的方法:
predicate = (e =>
e.USED == 0
&& codes.Any(x => x.StartsWith(e.CODE))
&& e.CHINA_CODES_HEADER_ID == batch.Id
&& e.CODE_LEVEL == codeLevel
&& (e.BATCH_ID == batch.Id || e.BATCH_ID == null));
chinaCodes.Contains(e.CODE)
你要区分String.Contains()
和IEnumerable<T>.Contains()
。
在字符串上,该方法将return是否字符串的某些部分是否包含您给定的参数。 (这就是你想要的)
在一个集合上,该方法将return集合是否包含一个完全相似的元素(不仅仅是它的一部分!)。
您需要检查 (1) 您的代码是否以 (2) 列表中的任何代码开头.
这是正确的 LINQ 语句:
chinaCodes.Any(x => e.CODE.StartsWith(x) )
编辑我最初误解了你的问题,但已经更正了我的答案。