【问题标题】:Best practice for selecting two columns选择两列的最佳实践
【发布时间】:2013-08-30 01:28:34
【问题描述】:

我有一些如下查询

var email= (from c in dataContext.tblC
            where (c.AA == aa)
            select c.email).ToList();
string emails = email.Aggregate((a, b) => a + "," + b);

现在我需要另一列 SecEmail,我不能只是 (...select c.email, c.SecEmail).ToList()。 任何关于我的建议都可以得到列表(email1、SecEmail1、email2、email3、SecEmail3、email4...)

【问题讨论】:

    标签: entity-framework-4 linq-to-entities


    【解决方案1】:

    如果您使用的是动态对象:

    var email = (from c in dataContext.tblC
                 where c.AA == aa
                 select new {
                   email = x.email,
                   secemail = c.secEmail,
                   // ...
                 }).ToList(); // IList<dynamic> & IDE will know what properties
                              // you supplied in the `select new { }`
    

    否则构建模型并填充它:

    public class SelectModel
    {
        public String email { get; set; }
        public String secemail { get; set; }
    }
    
    var email = (from c in dataContext.tblC
                 where c.AA == aa
                 select new SelectModel {
                   email = x.email,
                   secemail = c.secEmail,
                   // ...
                 }).ToList(); // IList<SelectModel>
    

    如果您希望将返回的行转换为电子邮件to 标头:

    var email = String.Join(", ", (
                  from c in dataContext.tblC
                  where c.AA == aa
                  select c.email
                ).AsEnumerable());
    

    这会让:

    +------------------+
    | email            |
    |------------------|
    | foo@contoso.com  |
    | bar@contoso.com  |
    | baz@contoso.com  |
    +------------------+
    

    上交:

    foo@contoso.com, bar@contoso.com, baz@contoso.com
    

    多列连接:​​

    var email = (from c in dataContext.tblC
                 where c.AA == AA
                 select new { email = c.email, secEmail = c.secEmail }).AsEnumerable();
    var to = String.Join(", ",
        email.Select(x => x.email)
            .Concat(email.Select(y => y.secEmail))
            // .Concat(eail.Select(y => x.thirdColumn))
            // ...
    );
    

    【讨论】:

    • 谢谢。但是如何将电子邮件转换为数组列表?所以我可以得到像(email1,SecEmail1,email2,email3,SecEmail3,email4 ...)这样的列表。实际上我需要一个字符串来发送电子邮件
    • 哦,我误会了。你想要连接的列?只是简单的String.Join(", ", (from c in dataContext.tblC where c.AA == aa select c.email).AsEnumerable());
    • 谢谢,但您只是选择了 String.Join 电子邮件,secEmail 在哪里?有人有 secEmail,有人没有。
    • 谢谢。但是如何将 secEmail 添加到列表中?
    • @MikeLong:抱歉耽搁了;查看我答案的最后一部分
    猜你喜欢
    • 2018-11-19
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多