实际上,我使用的是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
CountryFullName
列并使用CountryShortCode
获取相关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();
1}}。
是否可以使用Joins在单个查询中执行所有操作?
可能是这样的:
{{1}}
我是Linq的新手,发现这很困难。
是否可以通过使用逗号分隔的ShortCodes并生成Fullnames来查询数据?
我需要使用子查询吗?
答案 0 :(得分:1)
您遇到的问题是您无法对拆分进行连接查询。你需要制作一个SelectMany
。
所以,鉴于国家名单真的很小,那么简单的方法就是创建一个查找。
保持Messages
查询,然后执行此操作:
var lookup = obj.COUNTRY_MASTER
.ToDictionary(x => x.COUNTRY_SHORTNAME, x => x.COUNTRY_FULLNAME);
var Messages1 =
(
from m in Messages
from c in m.COUNTRIES.Split(',')
where lookup.ContainsKey(c)
orderby m.SENT_DATE descending
select new
{
m.ID,
m.COUNTRIES,
m.TITLE,
m.MESSAGE,
m.SENT_DATE,
m.GREETING_TYPE,
m.CATEGORY_NAME,
COUNTRY_FULLNAME = lookup[c],
}
).ToList();
根据以下评论:
var Messages1 =
(
from m in Messages
orderby m.SENT_DATE descending
select new
{
m.ID,
m.COUNTRIES,
m.TITLE,
m.MESSAGE,
m.SENT_DATE,
m.GREETING_TYPE,
m.CATEGORY_NAME,
COUNTRY_FULLNAME = String.Join(
", ",
m.COUNTRIES
.Split(',')
.Where(x => lookup.ContainsKey(x))
.Select(x => lookup[x])),
}
).ToList();
答案 1 :(得分:0)
使用逗号分隔列表作为数据字段不是一个好主意。您需要一个额外的多对多表格链接GREETING_TRANSACTIONS
和COUNTRIES
。