[免费设计] .net 3.5 – 用LINQ分页收集

Home > 动态 > 资讯动态 > [免费设计] .net 3.5 – 用LINQ分页收集

如果你有一个startIndex和一个计数,你如何通过LINQ中的一个集合进行分页?

我想在数据库中添加一些查找列表,但我希望它们易于本地化(SQL 2005,ADO.NET)这包括:

轻松管理多种语言轻松从数据库中检索值后备语言(如果缺少所选语言)我正在考虑使用一个表来存储多语言查找列表(使用不同语言使用相同的id)并使用一个函数来返回查找列表的值 – 通过接收ID和语言。

其中一个缺陷是我必须为使用查找列表的每个查询手动添加语言参数。

我正在研究一种解决方案,它允许我将参数作为“会话/全局变量”发送,或者通过sql查询自动发送参数,以及自行检索它的函数(要么自动附加参数) ,要么能够读取参数)。

解决方案可能看起来像这样,但我不介意它是否不同,只要它不显式给查询(伪代码):

1。使用“方法”发送语言
2.执行查询
3.获取本地化结果

通常查询看起来像这样(记得使用查找函数):
SELECT ..,
GetLookupList1(lookup_ID,language),
.. FROM TABLE

GetLookupList1
是用户定义的函数,用于检索查找表的查找值。通过使用此函数,SQL代码更易于阅读和维护。

该函数的主体将类似于:

SELECT @result = LookupValue FROM LookupTable1 WHERE ID = @ Lookup_ID and Language = @ lang返回@result

我想要的是能够将语言参数从函数中删除到某种静态变量,仅适用于当前的连接/语句/命令,因此查询看起来像
SELECT ..,GetLookupList1(lookup_ID),.. FROM TABLE

如果您构建这样的数据:

MessageToken DisplayText LangCode柴火木柴火Bois de chauffage fr

进行查询时,只提供默认的languageId(如果为空)或提供的languageId。使用标准的标记列表来显示消息。

从(某些表)中选择DisplayText,其中MessageToken =’firewood’和LangId =’en’

由于SQL Server中没有用户定义的全局变量,因此您必须使用以下两种方法之一:

表 – 临时或永久。永久表的示例:http://xxxx.xxx.com/mladenp/archive/2007/04/23/60185.aspx。SET CONTEXT_INFO:http://xxxx.xxx.com/en-us/library/ms187768.aspx。 Context_info允许您将128个二进制字节关联到会话/连接。它有效,但要小心。如果你习惯使用它,你就有可能在另一个环境中意外覆盖它。每个会话/连接只有一个。示例context_info t-sql:

声明@languagein varchar(30),
@ conttextin varbinary(128),    
@languageout varchar(30),
@ textout varbinary(128)选择@languagein =’ro-RO’选择@contextin = cast(@languagein as varbinary(128))设置context_info @contextin – 无论你喜欢什么:查询,存储过程。–context_info在会话/连接期间保持’ro-RO’选择@contextout = context_info()设置@languageout = replace(强制转换(@contextout as varchar(30)),0x00,”)打印@languageout

我在本地化中使用的另一种技术是三部分合并以确保结果。首先检查语言区域,然后检查语言,然后检查默认值。根据您的查询:

SELECT COALESCE(langregion.LookupValue,lang.LookupValue,fallback.LookupValue)LookupVal从LookupTable1回退LEFT OUTER JOIN LookupTable1 lang    
ON lang.ID = fallback.ID AND lang.Lang = @languageLEFT OUTER JOIN LookupTable1 langregion    
ON langregion.ID = fallback.ID AND langregion.Lang = @languagewithregion在哪里fallback.ID = @Lookup_IDAND fallback.Lang = @defaultlanguage

详细研究了这个问题后,我发现了以下内容:
我可以使用SET CONTEXT_INFO,但我必须注入一些SQL来解决问题。
最好的选择是不将本地化数据存储在查找表中。相反,存储一些标识字符串,并在应用程序中使用自定义本地化逻辑以将字符串与本地化数据匹配。对于.NET框架,如果我想从数据库中检索本地化信息,则可以使用资源和自定义资源提供程序来实现。

文章整理:南昌腾创科技猫先生建设

Copyright @ 2010-2016 南昌腾创科技有限公司 版权所有 赣ICP备15004057号