2012-04-29 37 views
0

我正在开发使用asp.net和c#的多语言新闻门户网站。目前该网站支持两种语言,并且在需要时将扩展到其他附加语言。所以我的工作是为网站创建基本框架。根据客户的要求,要存储在不同语言网站的数据库中的内容可能不同。因此,我创建了不同的表来存储新闻以不同的语言(如tblNews_EN,tblNews_am等)来存储用于Enlish或Amharic语言的内容。在运行时创建动态类型到IQueryable <T>#

现在我有类来检索最新消息,但我想泛化这些类并检索用户请求的特定文化的最新消息。最初我有类似以下的内容,它们只能用于从tblNews_EN表中检索最新消息。

public IQueryable<GetNews> GetTopExtraNews() 
{ 

     var topExtraNews = from p in db.GetNews 
          where p.TopOrderPriority == 2 
          orderby p.NewsDate descending 
          select p; 
     return topExtraNews; 
} 

这里GetNews是我的实体类,对应于tblNews_EN表。

现在我想概括一下这个,这样它将根据选择的文化从不同的表中返回对象。我试图使用类似IQueryable的东西,但我不认为这是处理我的案件的最佳选择。那么,有没有更好的选择来做到这一点?

+0

为什么你不使用已经做到这一点的工具,如Orchard CMS? – 2012-04-29 06:06:44

回答

0

如果我理解得很好,所有的表格都有相同的结构。

此基础上只发送表作为参数传递给你的方法和使用该参数查询:

public IQueryable<GetNews> GetTopExtraNews(typeofYourTable myTable) 
{ 

     var topExtraNews = from p in myTable 
          where p.TopOrderPriority == 2 
          orderby p.NewsDate descending 
          select p; 
     return topExtraNews; 
} 

当然,你必须将mytable的参数设置为正确的语言表调用你的方法之前, 。

+0

是的桌子有类似的结构。但不知道如何使用typeofYourTable类型。你能给我更多的例子如何使用它? – semytech 2012-04-30 05:15:00

+0

@semytech我打算在那里放置引用您的表的真实类型,例如DataTable。你的db.GetNews是某种类型的。这种类型您必须在那里定义该方法将接受的参数类型。 – Dummy01 2012-04-30 06:33:34

+0

我现在明白了,但IQueryable和db.GetNews中的特定于一个表。我想概括它们,以便在我调用此函数时,必须传递不同的类型,例如db.GetNews_EN等。让我给你我正在尝试的代码,但仍然不确定如何在运行时传递不同类型的代码。 – semytech 2012-04-30 06:58:02