2013-04-12 32 views
10

Tôi có truy vấn nơi nó sẽ trả về TRUE hoặc FALSE.Truy vấn LINQ trả về đúng hoặc sai

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 

và tôi muốn đính kèm kết quả truy vấn này cho một người sở hữu (của chuỗi datatype)

this.result = Conert.ToBoolean(query); 

làm thế nào để đạt được điều này trong LINQ?

EDIT:

lớp 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;} 
    } 
    } 

lớp 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; 
    } 
    } 
+1

'truy vấn' sẽ trả về một giá trị * cho mỗi hàng *. Bạn muốn kết quả của việc gọi 'ToString' là gì? –

+0

Bạn đang tìm kiếm một cái gì đó như '(query.Count()> 0). ToString()'? –

+0

@jon: tôi đoán anh ta mong đợi một sự thật/sai như một chuỗi –

Trả lời

21

thử này,

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 
+0

Kết quả trên chỉ làm việc cho tôi khi tôi chuyển nó thành boolean. Cảm ơn @Saptal Singh – user1221765

+0

Câu trả lời này đã được chỉnh sửa để cuối cùng sao chép bản thân tôi. –

+1

xin lỗi nhưng không sao chép của bạn, logic đơn giản của nó – Satpal

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" }; 
+1

Không có lý do gì để sử dụng loại ẩn danh ở đây (tôi nghi ngờ điều này sẽ biên dịch) và gọi ' ToString' trên nó chắc chắn sẽ không làm những gì cần thiết. –

3

Bạn có thể sử dụng .Any() hoặc .Count(). Bất kỳ() nào hoạt động tốt hơn. (Kiểm tra SO question này để xem tại sao)

Bất cứ()

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

tốt hơn là không sử dụng 'Đếm' vì nó xử lý không cần thiết trong trường hợp cụ thể này –

4

Nếu tôi hiểu bạn một cách chính xác bạn muốn nhận được true nếu một kết quả của truy vấn phù hợp với tất cả các điều kiện. Trong trường hợp đó thử một cái gì đó như thế này:

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(); 
0

Nếu bạn thực sự muốn có một "true" hoặc "false" Chuỗi phản ứng:

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(); 
     } 
    } 

Nhưng tôi sẽ đề nghị để làm cho tài sản "kết quả" một bool và loại bỏ ToString(). Khi bạn có bool, bạn luôn có thể thực hiện ToString() trên số

Các vấn đề liên quan