2010-08-24 54 views
5

Tôi có 3 loại sau đây trong tập tin dbml của tôi:Lọc một danh sách các đối tượng bằng cách so sánh với một danh sách các đối tượng khác nhau

public class Player { 
    public int PlayerID {get; set;} 
    public string Name {get; set;} 
} 

public class PlayerItem { 
    public int PlayerItemID {get; set;} 
    public int PlayerID {get; set;} 
    public int ItemID {get; set;} 
} 

Có là một hiệp hội tạo ra giữa Player.ID và PlayerItem.PlayerID

Public Class CustomItem { 
    public int ItemID {get; set;} 
    public string ItemName {get; set;} 
} 

Dưới đây là các thiết lập:

  1. tôi có một danh sách chơi - Danh sách <Player>
  2. Mỗi người chơi có một đứa trẻ EntitySet loại PlayerItem
  3. Tôi có một danh sách các mục - Danh sách <Item>

Làm thế nào tôi có thể chỉ chọn những cầu thủ có ít nhất một mục tùy chỉnh trong danh sách của họ về PlayerItems? Điều này về cơ bản là phù hợp với ItemID trong mỗi Player PlayerItems với Mã số trong CustomItem.

Cuối cùng, tôi muốn có một danh sách người chơi đơn giản - Danh sách <Player> - để làm việc.

Trả lời

6

LINQ làm cho các loại điều này dễ dàng:

players.Where(p => p.PlayerItemList.Any( 
       pi => customItems.Any(ci => ci.ItemID == pi.ItemID)); 

này cũng có thể được viết dưới dạng truy vấn:

var result = from p in players 
      from pi in p.PlayerItemList 
      where customItems.Any(ci => ci.ItemID == pi.ItemID)); 

này sẽ thực hiện tốt nhất nếu bạn tạo một bảng tra cứu hoặc từ điển từ tùy chỉnh của bạn mục được đặt:

var customItemDict = customItems.ToDictionary(ci => ci.ItemID); 
var result = from p in players 
      from pi in p.PlayerItemList 
      where customItemDict.ContainsKey(pi.ItemID)); 
+0

Thú vị. Tôi sẽ cung cấp cho một shot ngay bây giờ. –

+0

Đảm bảo bạn nhập System.Linq vào các không gian tên bạn đang sử dụng. – LBushkin

+0

Cảm ơn nhưng tôi vẫn gặp sự cố. Câu hỏi của tôi không được diễn đạt chính xác nhưng tôi đã cập nhật nó. Tôi KHÔNG có danh sách PlayerItem. Tôi có một đối tượng Player (được tạo trong tệp dbml của tôi) có liên kết với PlayerItem. Tôi đang cố gắng để truy vấn nhưng tôi không thể truy vấn p.PlayerItems vì nó là một Entityset và ném lỗi trong Visual Studiu. –

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