Linq where子列表包含部分值

Chr*_*ris 3 c# linq entity-framework

我想在其子项之一中搜索搜索词存在的项目

例如,我有一个带设置的设备,我想要一个包含DeviceSetting Id=1和的所有设备的列表value.Contains("test").我正在使用LINQ to SQL,所以如果可以做任何事情来保持这个快速(并避免投影到POCO)那将是伟大的

我该如何实现这一目标?

Device
{
   List<DeviceSetting> Settings { get; set; }
}

DeviceSetting
{
    int Id;
    string value;
}

var devices = new List<Device>(); // populated from EF

var search = "test";
var results = devices.Where(d => d.Settings.Contains(searchTerm));
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 5

使用Enumerable.Any检查是否有任何设备设置符合某些条件:

var results = 
    devices.Where(d => d.Settings.Any(s => s.value.Contains(searchTerm)));
Run Code Online (Sandbox Code Playgroud)

如果您还需要检查Id,请将此条件添加到Any的谓词:

d.Settings.Any(s => s.Id == 1 && s.value.Contains(searchTerm))
Run Code Online (Sandbox Code Playgroud)

注意:如果不将设备保存到列表中,则可以在服务器端执行此过滤.