Linq查询返回true或false

时间:2013-04-12 07:23:17

标签: c# linq linq-to-sql

我有一个查询,它应该返回TRUE或FALSE。

var query = from c in db.Emp
            from d in db.EmpDetails 
            where c.ID == d.ID && c.FirstName == "A" && c.LastName == "D" 
          // It should return TRUE when this above statement matches all these conditions

我希望将此查询结果附加到属性(字符串数据类型)

this.result = Conert.ToBoolean(query);

如何在LINQ中实现这一目标?

编辑:

EmpMapper类

  public class EmpMapper
  {
    EmpEntities db;
    // ID column already exists in the DB
    private int ID;
    // I am creating this property to add it from the UI side, depending on the certain conditions in the query. That is why I created a separate class to map the existing ID from the DB
    bool result;
    public EmpMapper(int ID, bool result)
    {
      this.db = new EmpEntites();
      this.ID = ID;
      var query = from c in db.Emp
            from d in db.EmpDetails 
            where c.ID == d.ID && c.FirstName == "A" && c.LastName == "D" 
          // It should return TRUE when this above statement matches all these conditions
      this.result = Convert.ToBoolean(query);
    }
   public int ID
   {
    get{return this.ID;}
    set{this.ID = value;}
   }
   public bool result
   {
    get{return this.result;}
    set{this.result = value;}
   }
   } 

MainViewModel类

      List<EmpMapper> empMapCol = new List<EmpMapper>();

     private void Page_Loaded(object sender, RoutedEventArgs e)
    {
      var emp_query = from c in db.Emp
                      orderby c.ID
                      select a;
     List<Emp> empCol = emp_query.ToList();
     foreach(Emp item in empCol)
     {
       this.empMapCol.Add(new EmpMapper(item.ID, item.result)); 
     }
     datagrid1.ItemsSource = empMapCol;
     }
     }

5 个答案:

答案 0 :(得分:26)

试试这个,

 var query = (from c in db.Emp
        from d in db.EmpDetails 
        where c.ID == d.ID && c.FirstName == "A" && c.LastName == "D"
         select c 
         ).Any(); 

  this.result = query; //no need to convert to boolean its already bool value

答案 1 :(得分:5)

如果我理解正确,如果查询结果中的一个符合所有条件,您希望获得true。在这种情况下尝试这样的事情:

var found =
    (from c in db.Emp
    from d in db.EmpDetails
    where c.ID == y.ID && c.FirstName == "A" && c.LastName == "D"
    select c).Any();

this.result = found.ToString();

答案 2 :(得分:3)

您可以使用.Any()或.Count()。 任何()表现更好。 (选中SO question查看原因)

<强>。任何()

var query = from c in db.Emp
            from d in db.EmpDetails 
            where c.ID == d.ID && c.FirstName == "A" && c.LastName == "D" 
          // It should return TRUE when this above statement matches all these conditions
this.result = query.Any().ToString()

<强> .Count之间()

var query = from c in db.Emp
            from d in db.EmpDetails 
            where c.ID == d.ID && c.FirstName == "A" && c.LastName == "D" 
          // It should return TRUE when this above statement matches all these conditions
this.result = (query.Count() > 0).ToString()

答案 3 :(得分:0)

var query = from c in db.Emp
            from d in db.EmpDetails 
            select new { c.ID == y.ID &&  
                         c.FirstName == "A" && 
                         c.LastName == "D" };

答案 4 :(得分:0)

如果你真的想要一个“真”或“假”字符串响应:

    public string result
    {
        get
        {
            return db.Emp.SelectMany(c => db.EmpDetails, (c, d) => new {c, d})
                         .Where(@t => c.ID == y.ID && c.FirstName == "A" && c.LastName == "D")
                         .Select(@t => c)).Any().ToString();
        }
    }

但我建议将属性“result”设为bool并删除ToString()。 一旦你有一个bool,你总是可以在其上做一个ToString()