我有DBSet
db.Company
,它包含3条记录,如
ID name is_active
1 company1 1
2 company2 1
3 company3 1
My Created类传输记录:
public class CompanyFinal
{
public int id { get; set; }
public string name { get; set; }
public string selected { get; set; }
}
我的LINQ看起来像这样:
(from h in db.Company where h.is_active == 1 select new CompanyFinal { id = h.id, name = h.name, selected = "false" }).ToList();
毫无疑问,LINQ
正在运行,但我需要在LINQ中将第一条记录设为selected="true"
,即company 1
。
我怎么能这样做?有可能吗?
提前致谢
答案 0 :(得分:2)
如果我们定义局部变量
,该怎么办? var counter = 1;
(from h in db.Company where h.is_active == 1 select new CompanyFinal { id = h.id, name = h.name, selected = (counter++ == 1 ? "true" :"false") }).ToList();
答案 1 :(得分:2)
由于你正在制作一个列表,我认为计算这个禁食方法,也是最好的可维护方法(别人理解)就是只分配第一个元素:
(使用方法语法,显示替代选择)
var resultingList = db.Company
.Where(company => company.is_active == 1)
.Select(company => new CompanyFinal()
{
id = company.id,
name = company.name,
selected = "false",
})
.ToList();
if (resultingList.Any())
resultingList[0].selected = true;
如果您不确定是否要将其转换为列表,例如因为您希望在其后连接其他Linq函数,请考虑使用此overload of Enumerable.Select
var result = db.Company
.Where(company => company.is_active == 1)
.Select( (company, index) => new CompanyFinal()
{
id = company.id,
name = company.name,
selected = (index == 0) ? "true" : "false",
});
顺便说一句,考虑更改您的CompanyFinal类,使selected为bool而不是字符串,这将使您的代码更不容易出错。例如,在构造之后,Selected既不是“true”也不是“false”。用户可以为其赋予类似“TRUE”或String.Empty
的值如果您的类的用户确实需要选择字符串属性而不是布尔属性,请考虑为其保留get属性:
public class CompanyFinal
{
public int id { get; set; }
public string name { get; set; }
public bool Selected {get; set;}
// for old user compatability:
public string selected
{
get { return this.Selected ? "true" : "false"; }
}
}
以下内容会出错:
if (companyFinals[0].selected == "True") ...
与
if (companyFinals[0].Selected)
答案 2 :(得分:1)
从你的结果:
var companies = (from h in db.Company
where h.is_active == 1 select h).ToList();
var companyFinals = (from h in companies
select new CompanyFinal {
id = h.id,
name = h.name,
selected = "false"
}).ToList();
var firstCompany = companies.FirstOrDefault();
if (firstCompany != null) {
firstCompany.selected = true;
}
// save result back to database
除了编写存储过程之外,没有办法在1次操作中执行此操作。