我一直在尝试一些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}
但我希望有另一种方法来实现这一目标。
所以,如果有人可以向我展示正确或另一种方式来实现这一目标,我只是在徘徊:)
全部谢谢:)
答案 0 :(得分:1)
您必须选择实际项目,然后参考其属性。没有办法将各列扩展为匿名类型。
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
}
选择实际项目可以访问用于构建匿名类型的相同属性。如果查询有更多内容,例如与另一个表的连接,并且包含匿名类型的结果中的字段,以及整个Client
对象,那么这并不是完全浪费。
答案 1 :(得分:0)
你无法使用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; }