基础 - 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; }