2010-12-13 28 views
9

Tôi đang cố gắng để hoàn thành một cái gì đó như thế này,LINQ, sử dụng "biến" bên trong một loại vô danh

var data = from p in db.Projects 
        select new 
        { 
         Cost = p.CostReports.FirstOrDefault().Charged, 
         Tax = Cost * 0.25 
        }; 

Nói cách khác, tôi muốn sử dụng chi phí như là một biến. Có thể không? Nếu vậy, làm thế nào?

Mã của tôi chỉ là một ví dụ, dự án tôi đang làm việc phức tạp hơn một chút.

Edit:

Tôi hy vọng đây là một ví dụ tốt về những gì tôi đang cố gắng để làm,

var data = (from p in db.Projects 
        select new 
        { 
         Name = p.ProjectName, 
         Customer = p.CustomerID, 
         Cost = p.Cost 
        }).GroupBy(p => p.Customer) 
        .Select(g => new 
        { 
         Something = g.Where(p => p.Customer == g.Key).Sum(p => p.Cost), 
         SomethingElse = Something * 0.25 
        }); 

Trả lời

25

Sử dụng các từ khóa let trong truy vấn của bạn.

var data = from p in db.Projects 
      let cost = p.CostReports.FirstOrDefault().Charged 
      select new 
      { 
       Cost = cost, 
       Tax = cost * 0.25 
      }; 

Sửa

Về cập nhật của bạn và chặn thêm thông tin, tôi có thể vẫn bị cám dỗ để sử dụng let bằng cách viết lại cấu trúc truy vấn của bạn.

var data = from g in db.Projects.Select(p => 
       new 
       { 
        Name = p.ProjectName, 
        Customer = p.CustomerID, 
        Cost = p.Cost 
       } 
      ).GroupBy(p => p.Customer) 
      let something = g.Sum(p => p.Cost) 
      select new 
      { 
       Something = something, 
       SomethingElse = something * 0.25 
      }; 

Trong trường hợp này, from g in ... đề cập đến dữ liệu được nhóm, cho phép bạn sử dụng cú pháp biểu thức truy vấn đối với dữ liệu này, bao gồm let.

+0

Cám ơn câu trả lời của bạn, tôi đoán ví dụ của tôi là một chút để đơn giản. Tôi biết về "cho". Vui lòng xem chỉnh sửa của tôi ở trên .. – Nordis

+0

@Nordis, đã cập nhật câu trả lời một chút. –

+0

Cảm ơn, không biết tôi có thể sử dụng để ở đó. :) – Nordis

5
var data = from p in db.Projects 
      let cost = p.CostReports.FirstOrDefault().Charged 
      select new 
      { 
       Cost = cost, 
       Tax = cost * 0.25 
      }; 
2

Bạn có thể ít nhất là chuỗi lựa chọn với nhau và lưu trữ loại vô danh của bạn như là một kết quả trung gian:

var data = (from p in db.Projects 
       select new 
       { 
        Cost = p.CostReports.FirstOrDefault().Charged, 
        Tax = Cost * 0.25 
       }) 
      .select(anon => new { Cost = anon.Cost, Tax = anon.Cost * 0.25 }); 
+1

Không có gì sai với cách tiếp cận này. Đây là những gì một tuyên bố cho phép sôi xuống. – spender

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