在SQL查询C#中连接字符串

时间:2014-12-01 15:26:08

标签: c# sql sql-server

我正在尝试查询数据库并返回两个连接成一个字符串的列,是否有一种简单的方法可以执行此操作?

public ActionResult GetContactList (int? id) 
{
    var contacts = (from ofg in db.Contacts
                    where ((ofg.ContactId == id) && (ofg.Deleted == false))
                    select new 
                        {
                            (ofg.FirstName + ofg.Surname as ofg.FullName),
                            ofg.ContactID
                        }).OrderBy(ofg => ofg.FirstName);

    return this.Direct(contacts.ToArray());
}

2 个答案:

答案 0 :(得分:2)

在这种情况下创建一个新的匿名对象可能看起来更像这样:

select new { FullName = ofg.FirstName + ofg.Surname, ContactID = ofg.ContactID }

请注意,这不会起作用:

OrderBy(ofg => ofg.FirstName)

因为对象中没有FirstName字段。 (仅限FullNameContactID。)如果您需要按该字段排序,则需要选择该字段:

select new { FirstName = ofg.FirstName, FullName = ofg.FirstName + ofg.Surname, ContactID = ofg.ContactID }

您可能还会在此逻辑中发现,您的FullName字段不会在名称之间添加空格。如果你想要,你需要将它包含在逻辑中。

作为旁注,像FullName字段这样的东西通常是实际模型而不是匿名对象的好例子。考虑这样的事情:

public class SomeModel
{
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public int ContactID { get; set; }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", FirstName, Surname);
        }
    }
}

这会将FullName逻辑封装在它所属的对象上,您只需选择该对象的实例即可:

select new SomeModel { FirstName = ofg.FirstName, Surname = ofg.Surname, ContactID = ofg.ContactID }

这种消耗代码的方式不必复制创建模型的逻辑,模型本身包含它拥有的逻辑。然后,您可以继续从那里添加更多功能,集中到单个模型。

答案 1 :(得分:0)

尝试为对象中的属性添加名称,对于示例:

public ActionResult GetContactList (int? id) {

    var contacts = from ofg in db.Contacts
                   where ((ofg.ContactId == id) && (ofg.Deleted == false))
                   order by ofg.FirstName
                   select new { FullName = (ofg.FirstName + ofg.Surname), 
                                ContactID = ofg.ContactID };

    return this.Direct(contacts.ToArray());

}