繁体   English   中英

Linq内部连接使用拆分

[英]Linq inner join using Split

实际上,我正在使用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列,并使用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的新手,但发现这很困难。

是否可以通过使用逗号分隔的简码并生成全名来查询数据?

我需要使用子查询吗?

您遇到的问题是您无法对拆分执行联接查询。 您需要从中制作一个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();

使用逗号分隔的列表作为数据字段不是一个好主意。 您需要一个额外的多对多表来链接GREETING_TRANSACTIONSCOUNTRIES

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM