2014-12-01 69 views
-3

我想查询一个数据库并将两列连接为一个字符串,是否有一个简单的方法做到这一点?在SQL查询C中连接字符串#

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()); 
} 
+6

你的例子工作吗?如果不是什么例外,你会得到什么?为什么在数据库中这样做,而不是通过代码? – ChrFin 2014-12-01 15:27:40

回答

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

'模型本身包含它拥有的逻辑'+1:然后你也可以很容易地适应这个逻辑。如果需要更改'String.Format'字符串以打印“LastName FirstName”而不是“FirstName LastName”... – ChrFin 2014-12-01 15:36:44

+0

谢谢,我尝试将全名方法添加到模型中,如上所示,并得到错误 - 指定的类型成员'FullName'在LINQ to Entities中不受支持。仅支持初始化程序,实体成员和实体导航属性。 – stephenjgray 2014-12-01 15:48:02

+0

@stephenjgray:你究竟做了什么? – David 2014-12-01 15:51:36

0

试着在匿名对象的属性添加名称,smaple:

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()); 

} 
+0

感谢Felipe,完美的工作 – stephenjgray 2014-12-01 15:51:11