2011-09-08 41 views
7

Tôi có một bảng gọi là visit với các cột sau:Chuyển đổi truy vấn SQL để LINQ

visit_Id 
member_Id 
visit_Date 
visit_Time 
visit_DateTime 
visit_Status values like (accepted, refused) 

Tôi có truy vấn SQL sau:

string sql = @"SELECT CONCAT(UPPER(SUBSTRING(visit_Status, 1, 1)), SUBSTRING(visit_Status FROM 2)) as Status, COUNT('x') AS Visits 
    FROM visits 
    WHERE visit_Date BETWEEN '2001-09-08' AND '2009-09-09' 
    GROUP BY visit_Status"; 

Làm thế nào tôi có thể chuyển đổi SQL này vào LINQ? Tên pháp nhân của tôi là dbcontext. Cảm ơn trước sự giúp đỡ nào.

Trả lời

5

Bạn cần phải sử dụng EntityFunctions đặc biệt

DateTime dateFrom = new DateTime(2001, 9, 8); 
DateTime dateTo = new DateTime(2001, 9, 9); 

var query = from v in dbcontext.Visits 
      where v.visit_Date >= dateFrom && v.visit_Date <= dateTo 
      group v by v.visit_Status into vg 
      select new 
      { 
       Status = EntityFunctions.Concat(EntityFunctions.ToUpper(vg.Key[0]), 
               EntityFunctions.SubString(1, EntityFunctions.Length(vg.Key) -1), 
       Visits = vg.Count() 
      } 
+0

Tôi thứ hai. Đoán tôi bỏ lỡ những gì anh ta muốn với 'x', nhưng có điều này sẽ làm tốt. –

+0

@Aducci Rất cám ơn vì đã hoạt động ngay bây giờ ... –

+0

@cubicle Tôi đại diện cho dữ liệu này trong biểu đồ ... vì vậy tôi muốn hiển thị số lượng thành viên cùng với trạng thái trong biểu đồ ... count (x) là số lượt truy cập. .... –

1

Bạn có thể cho tôi biết bạn đang cố gắng làm gì với Count ('x') không?

from v in dbcontext.visits 
where v.visit_Date >= "2001-09-08" && v.visitDate <= "2009-09-09" 
group by v.visit_Status 
select new 
{ 
    Status = string.Concat(char.ToUpper(v.visit_Status[0], v.visit_Status.Substring(1)), 
    Visits = //Not sure what 'x' is in your example 
} 
+0

Xin lỗi hơn những gì là 'x' vì tôi không thấy rằng trong bảng của bạn được gọi là chuyến viếng thăm. –

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