Linq to Entities LIKE '[A-G]%' query
本文关键字:query A-G Entities Linq to LIKE | 更新日期: 2023-09-27 18:18:47
我试图重新创建一些SQL查询,我已经进入L2E语句。其中一个查询是:
SELECT TOP 25 itms.[StringValue]
,itms.[Name]
,itms.[Picture]
FROM [DB].[dbo].[Items] AS itms
WHERE itms.StringValue LIKE '[A-G]%'
我有一个开始的char
(在本例中是a)和一个结束的char
(G),我需要在开始和结束之间拉出StringValue
以char
开头的所有项目。
我的第一个尝试是看看L2E是否会给我这个查询:
items = from i in items
where i.StringValue.StartsWith("[" + refinement.Value + "]")
select i;
应该工作的几个选项:
1)如果您知道过滤器只是基于第一个字符,那么您可以这样做:
var startChar = 'A';
var endChar = 'G';
// other options, but you get the point
var validStartChars = Enumerable.Range(0, 26)
.Select(i => (char)('A' + i))
.Where(c => c >= startChar && c <= endChar)
.ToArray();
var matches = items.Where(i => validStartChars.Contains(i.StringValue[0]));
类似地,您可以获取第一个字符并在Where子句中进行大小检查(如果总是这样的范围)
2)如果你想,你仍然可以使用sql来查询L2E,只需使用ExecuteStoreQuery,让它为你返回实体:
http://msdn.microsoft.com/en-us/library/dd487208.aspx如果您希望跟踪返回的实体,请确保调用允许您指定实体集名称的重载:
http://msdn.microsoft.com/en-us/library/dd487226.aspx这应该是真的工作,所以我不完全确定为什么它没有。值得检查这种改进。Value来自某个合理的地方,而不是直接来自另一个LINQ to SQL查询。
除此之外,还有SQLMethods类,它提供了许多在编写LINQ to SQL查询时可以在SQL中使用的功能(注意它不适用于LINQ to objects查询)。因此,您可以使用SQLMethods Like方法,并将原始Like语句赋给它。