LINQ 查询中的对象格式和 return 空字符串
Object format and return empty string in LINQ query
我正在使用 MVC 4 和 entity framework,我正在从服务器检索电子邮件:
var data = db.Candidates.Where(c => ids.Contains(c.ID) && c.Email1 != null).Select(c => new { c.Email1, c.ID }).ToList();
我的第一个问题:如果 Email1 字段为空,LINQ 是否允许我 return 一个空字符串,类似于 SQL 合并? (我会从 where 子句中删除 null 测试)。
第二个问题:什么是最容易使用的对象(替换 "var data =" 如果我想获得 c.Name 和 Email1,然后在循环中使用两者?我应该创建只有 2 个字段的模型?
非常感谢您提供任何见解。
My first question: Does LINQ allow me to return an empty string form the Email1 field if it is null, similar to SQL coalesce? (I would remove the null test from the where clause).
是的,??
运算符的工作方式类似于 coalesce
。:
new { Email1 = c.Email1 ?? "", c.ID } //String.Empty would be nicer, but i think it depends on EF version if you are allowed to use it.
关于你的第二个问题,如果这是你唯一要使用它们的地方,那么匿名就很好了。
如果你想在其他地方使用它,是的,创建一个只有两个属性的对象......毕竟这就是对象的目的。 (或者可能是一个结构?)
- 一次问一个问题。
2a。 C# 中的 Null Coalescence 运算符是 ??
。
2b。这可能会也可能不会被您的 Linq 提供程序转换为数据库查询。
这样做,
var data = db.Candidates
.Where(c => ids.Contains(c.ID))
.Select(c => new
{
Id = c.Id,
Email1 = c.Email1 ?? string.Empty,
Name = c.Name
});
foreach(var row in data)
{
var name = row.Name // etc...
}
如果您的 Linq Provider 不支持 ??
运算符,请放入 .ToList()
并使用 linq-to-objects 执行这样的转换,
var data = db.Candidates
.Where(c => ids.Contains(c.ID))
.ToList() // <-- from here is Linq-To-Objects
.Select(c => new
{
Id = c.Id,
Email1 = c.Email1 ?? string.Empty,
Name = c.Name
});
我正在使用 MVC 4 和 entity framework,我正在从服务器检索电子邮件:
var data = db.Candidates.Where(c => ids.Contains(c.ID) && c.Email1 != null).Select(c => new { c.Email1, c.ID }).ToList();
我的第一个问题:如果 Email1 字段为空,LINQ 是否允许我 return 一个空字符串,类似于 SQL 合并? (我会从 where 子句中删除 null 测试)。
第二个问题:什么是最容易使用的对象(替换 "var data =" 如果我想获得 c.Name 和 Email1,然后在循环中使用两者?我应该创建只有 2 个字段的模型?
非常感谢您提供任何见解。
My first question: Does LINQ allow me to return an empty string form the Email1 field if it is null, similar to SQL coalesce? (I would remove the null test from the where clause).
是的,??
运算符的工作方式类似于 coalesce
。:
new { Email1 = c.Email1 ?? "", c.ID } //String.Empty would be nicer, but i think it depends on EF version if you are allowed to use it.
关于你的第二个问题,如果这是你唯一要使用它们的地方,那么匿名就很好了。 如果你想在其他地方使用它,是的,创建一个只有两个属性的对象......毕竟这就是对象的目的。 (或者可能是一个结构?)
- 一次问一个问题。
2a。 C# 中的 Null Coalescence 运算符是 ??
。
2b。这可能会也可能不会被您的 Linq 提供程序转换为数据库查询。
这样做,
var data = db.Candidates .Where(c => ids.Contains(c.ID)) .Select(c => new { Id = c.Id, Email1 = c.Email1 ?? string.Empty, Name = c.Name }); foreach(var row in data) { var name = row.Name // etc... }
如果您的 Linq Provider 不支持 ??
运算符,请放入 .ToList()
并使用 linq-to-objects 执行这样的转换,
var data = db.Candidates
.Where(c => ids.Contains(c.ID))
.ToList() // <-- from here is Linq-To-Objects
.Select(c => new
{
Id = c.Id,
Email1 = c.Email1 ?? string.Empty,
Name = c.Name
});