【发布时间】:2014-07-03 08:51:44
【问题描述】:
实际上,我正在使用2 tables,例如GREETING_TRANSACTIONS 和COUNTRIES。
在COUNTRIES 表中,我维护CountryShortCode 和CountryFullName 的列表。
在发送Greetings 时,我将CountryCodes 以, 的方式保存在GREETING_TRANSACTIONS 中。例如:IN,MY,CN 用于印度、马来西亚和中国。
现在我正在做的是:首先我使用此查询获取GREETING_TRANSACTIONS 的列表
var Messages =
(
from u in obj.GREETING_TRANSACTIONS
orderby u.SENT_DATE descending
select new
{
u.ID,
u.COUNTRIES,
u.TITLE,
u.MESSAGE,
u.SENT_DATE,
u.GREETING_TYPE,
u.CATEGORY_NAME
}
).ToList();
然后获取每个项目和splitting COUNTRIES 列并使用CountryShortCode 获取相关的CountryFullName 并准备DataTable 并绑定到GridView。
是否可以使用联接在单个查询中完成所有操作?
可能是这样的:
var Messages1 =
(
from u in obj.GREETING_TRANSACTIONS
join c in obj.COUNTRY_MASTER
on u.COUNTRIES.Split(',') equals c.COUNTRY_SHORTNAME
orderby u.SENT_DATE descending
select new
{
u.ID,
u.COUNTRIES,
u.TITLE,
u.MESSAGE,
u.SENT_DATE,
u.GREETING_TYPE,
u.CATEGORY_NAME,
c.COUNTRY_FULLNAME
}
).ToList();
我是 Linq 的新手,发现这非常困难。
是否可以通过使用逗号分隔的 ShortCodes 并生成 Fullnames 来查询数据?
我需要使用子查询吗?
【问题讨论】:
-
是的,你可以这样做
-
你到底想要什么?
-
是的。但是要循环所有国家/地区,需要很长时间,例如 45 秒。是否可以使用 Joins 编写单个查询?
-
在数据库中使用逗号分隔的字段通常是一个设计缺陷。您应该有一个问候语和国家/地区之间的关系表,因为它是多对多关系。
-
正如@RaphaëlAlthaus 提到的,如果您将拥有 M2M,那么您可以使用 LINQ 进行查询而不使用连接