cdh*_*wie 35
您可以使用let创建中间值:
var name = (from x in db.authors
let fullName = x.name + " " + x.surname
where fullName == "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName });
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
你需要提前放置那部分投影,这很容易用一个let子句:
var name = from x in db.authors
let fullName = x.name + " " + x.surname
where fullName == "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName };
Run Code Online (Sandbox Code Playgroud)
请注意,x.name + " " + x.surname将编译为相同的代码String.Concat(x.name, " ", x.surname),但对大多数人来说更具可读性.另请注意,由于您没有在()括号外做任何事情,因此不需要它们.
我希望任何好的SQL LINQ提供程序都应该将此查询转换为合理有效的SQL查询,但您应该自己验证.另一方面,我通常建议更喜欢查询单个字段,例如
where x.name == "Jean Paul" && x.surname == "Olvera"
Run Code Online (Sandbox Code Playgroud)
你还没有创建它.
话虽如此,因为您事先知道了名称,所以您应该能够对部件执行查询:
var name = from x in db.authors
where name == "Jean Paul" && surname == "Olvera"
orderby x.surname
select new { x.id_author, fullName= String.Concat(x.name," ", x.surname) };
Run Code Online (Sandbox Code Playgroud)
否则,您可以使用let此操作:
var name = from x in db.authors
let fullName = String.Concat(x.name," ", x.surname)
where fullName == "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName=fullName ) };
Run Code Online (Sandbox Code Playgroud)
方法语法更容易,因为您不受操作顺序的限制:
var query = authors.OrderBy(x => x.surname)
.Select(x => new
{
x.id_author,
fullName = String.Concat(x.name, " ", x.surname)
})
.Where(x => x.fullName == "Jean Paul Olvera");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32768 次 |
| 最近记录: |