请用通俗易懂的英语把它从C#翻译成SQL

本文关键字:翻译 SQL 通俗易懂 英语 | 更新日期: 2023-09-27 18:24:42

有人能用英语把这个c#分解一下吗?有可能以某种方式在其中添加一个联接吗?

return db.Providers.Where(n => n.LastName.StartsWith(prefixText)).OrderBy(
       n=>n.LastName).Select(n => n.LastName).Take(count).ToArray();

谢谢。

请用通俗易懂的英语把它从C#翻译成SQL

SQL查询可能类似于:

SELECT LastName FROM Providers
WHERE LastName LIKE 'PrefixText%'
ORDER BY LastName
LIMIT count; -- This may be TOP in MS SQL or ROWNUM in Oracle

意思是:

给我Providers表中的所有行,其中LastName列以PrefixText开头(无论该变量包含什么)。我希望它们按LastName列的字母顺序排序,并且我只希望第一个计数行(即,如果count等于50,则最多可以得到50行)

当然,你可以做JOIN。您可以参考Where表达式中的另一个表:

db.Providers.Where(n => n.ProviderGroup.ADgroup == 'Active Dir Group')

如果您的模型提供了表之间的必要关系,那么框架将自动为您加入ADgroup

获取LastName以变量prefixText中的文本开头的所有提供者的x个姓氏,按字母升序排列。

这将返回一个数组,该数组包含count姓氏,按字母顺序递增,以prefixText开头。

这是相应的SQL代码:

select top @count LastName from Providers
where LastName like '+@prefixText+%'
order by LastName

为什么这里需要join

更新:

根据OP评论:

我需要一个join来限制Ajax自动扩展程序的结果。。。

您不需要连接来限制Ajax Auto Extender中的结果,只需使用SQL的top子句或LINQ的Take方法,就像您现在所做的那样:

db.Providers.Where(n => n.LastName.StartsWith(prefixText)).OrderBy( n=>n.LastName).Select(n => n.LastName).Take(count).ToArray();