Linq内部联接使用Split

时间:2014-07-03 08:51:44

标签: c# asp.net .net linq join

实际上,我使用的是2 tables GREETING_TRANSACTIONSCOUNTRIES

COUNTRIES表中,我维护着CountryShortCodeCountryFullName的列表。

在发送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来查询数据?

我需要使用子查询吗?

2 个答案:

答案 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_TRANSACTIONSCOUNTRIES