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),我需要在开始和结束之间拉出StringValuechar开头的所有项目。

我的第一个尝试是看看L2E是否会给我这个查询:

items = from i in items
        where i.StringValue.StartsWith("[" + refinement.Value + "]")
        select i;

Linq to Entities LIKE '[A-G]%' query

我知道这行不通,但还是值得一试。

应该工作的几个选项:

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语句赋给它。