C# 如何查询列表<;T>;?
我是ASP.net和LINQ的新手,但是教程相当短。我正在创建一个WebAPI项目,并在我的模型下创建了一个名为gender的类,如下所示C# 如何查询列表<;T>;?,c#,asp.net,linq,asp.net-web-api,C#,Asp.net,Linq,Asp.net Web Api,我是ASP.net和LINQ的新手,但是教程相当短。我正在创建一个WebAPI项目,并在我的模型下创建了一个名为gender的类,如下所示 public class Gender { public int Id { get; set; } public string Description { get; set; } public Language LanguageId { get; set; } public int InternalCode { get; se
public class Gender
{
public int Id { get; set; }
public string Description { get; set; }
public Language LanguageId { get; set; }
public int InternalCode { get; set; }
public bool isActive { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
}
我还没有创建一个链接到它的数据库,也没有使用实体框架,因为我还在学习它。我在控制器动作中创建了一个性别列表,仅用于培训目的。当我试图用LINQ查询列表以便能够返回正确的对象时,我在下面的gen in Gender中的var query=from行得到一个编译器错误,我不确定原因
// Show
// URI GET + api/Gender/id/
[HttpGet]
public Gender Gender(int id)
{
var genders = new List<Gender>();
genders.Add(new Gender { Id = 1, Description = "Male" });
genders.Add(new Gender { Id = 2, Description = "Female" });
var query = from gen in Gender
where gen.Id == id
select gen;
return query;
}
//显示
//uriget+api/Gender/id/
[HttpGet]
公共性别(int id)
{
var genders=新列表();
添加(新的性别{Id=1,Description=“Male”});
添加(新的性别{Id=2,Description=“Female”});
var query=来自性别中的gen
其中gen.Id==Id
选择gen;
返回查询;
}
试试看
查询您的列表,genders
,而不是类型Gender
然后,您可以通过执行以下操作返回单个项目:
return query.FirstOrDefault();
return genders.FirstOrDefault(gen => gen.Id == id);
当然,您可以通过执行以下操作压缩所有这些内容:
return query.FirstOrDefault();
return genders.FirstOrDefault(gen => gen.Id == id);
没什么大不了的,但是如果Id
是数据库中的主键,SingleOrDefault
应该更合适。为一个项目提供一个Id,然后取回另一个共享该Id的项目听起来不正确。不一定SingleOrDefault
意味着一个合同(它必须是唯一的),并可能导致性能损失,因为它(理论上)必须检查所有条目以确保只有一个条目。您应该询问是否希望在“查询”时间而不是“写入”时间强制执行合同。在这里也可以看到