我有两张表代表混合物和混合物的成分。表格布局如下:
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个。提前感谢!
答案 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();