设置LINQ

时间:2017-12-07 03:47:00

标签: c# linq

我有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

我怎么能这样做?有可能吗?

提前致谢

3 个答案:

答案 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次操作中执行此操作。