linq到sql子选择

时间:2012-03-26 22:29:19

标签: sql linq

我有两张表代表混合物和混合物的成分。表格布局如下:

Mixture table:
MixtureID uniqueidentifier
MixtureDescription varchar(50)

Components table:
ComponentID uniqueidentifier
MixtureID uniqueidentifier (FK to previous table)
ComponentName varchar(50)
ComponentRatioPercentage int

现在,我要做的是获取用户输入的组件名称列表,并找到包含所有这些组件的任何混音的ID。

在SQL中,我可以这样:

select distinct MixtureID 
from Mixture Mixture 
where exists (select ComponentName
       from Components Components1
       where Components1.MixtureID = Mixture.MixtureID and
             Components1.ComponentDescription = 'SomeComponentName')
      and exists (select ComponentName
       from Components2 
       where Components2.MixtureID = Mixture.MixtureID and
             Components2.ComponentDescription = 'SomeOtherComponentName')
      and exists....

等,为每个组件添加一个子选择。

如何在linq to sql中执行此类操作?在用户完成输入之前,不会事先知道要查找的组件数量,尽管最多只有10个。提前感谢!

1 个答案:

答案 0 :(得分:0)

var components = new string[] {"SomeComponentName", "SomeOtherComponentName"};
var query = Mixtures.AsQueryable();
foreach (var component in components)
{
    var tmpComponent = component;
    query = query.Where(m => m.Components
                                  .Any(c => t.ComponentDescription == tmpComponent)
                           );
}

var mixturesIds = query.Select(m=>m.MixtureId).Distinct();