基础 - SQL查询到LINQ查询

问题描述:


我一直在尝试一些LINQ查询可有人请说明如何下面的SQL查询来LINQ转换:基础 - SQL查询到LINQ查询

SELECT *, firstname+' '+lastname AS FullName FROM Client WHERE age > 25; 

不要担心,其中部分(把它放在更完整的位置)更多的徘徊如何实现第一部分。

现在我也碰到过这样的事情:

from c in dc.Clients select new {FullName = c.firstname + " "+c.lastname} 

但我不知道如何得到它来选择一切没有具体说明,即:

{firstname = c.firstname, id = c.id ..... etc} 

,但我希望换一种方式来实现这一点。

所以我只是游荡,如果有人能告诉我正确的或实现这一点的另一种方式:)

感谢所有:)

你要选择那么实际的项目交给其属性。无法将单个列扩展为匿名类型。

var query = from c in dc.Clients 
      where c.Age > 25 
      select new 
      { 
       Client = c, 
       FullName = c.firstname + " " + c.lastname 
      }; 

foreach (var item in query) 
{ 
    // item.Client.Id 
    // item.FullName 
    // item.Client.FirstName 
} 

选择实际项目可让您访问您用来构造匿名类型的相同属性。这并不是一个完全的浪费,尽管如果查询有更多的事情发生,比如与另一个表的连接,并且包括来自匿名类型的字段以及整个对象。

您不能使用Linq2Sql或EF自动生成每一列(但是您可以找到一种方法来模拟像Dapper和大量微观模式这种行为)。

更方便,你可以选择带有3个字段,名字,姓氏和像一个客户端一个新的匿名类型:

from c in dc.Clients 
select new 
{ 
    FullName = c.firstname + " "+c.lastname, 
    Client = c 
} 

不过我建议只选择那些你真正需要的属性。这迫使您考虑如何编写查询以及查询打算做什么(因此选择)。或者,您可以选择客户端,并使用一些扩展方法来选择全名。如:

public static string GetFullName(this Client client){ return client.firstname + " " + client.lastname; }