我想在这里用实体框架在Linq中转换旧的原始SQL查询。Linq中的“IN”运算符
它将IN运算符与一组项目一起使用。查询是类似的东西:
SELECT Members.Name
FROM Members
WHERE Members.ID IN (SELECT DISTINCT ManufacturerID FROM Products WHERE Active = 1)
ORDER BY Members.Name ASC
由于子查询返回的不是一个字符串,但字符串的集合,我不能使用String.Contains()
方法。
我想过做这样的事情:
var activeProducts = (
from products in db.ProductSet
where product.Active == true
select product.ManufacturerID);
然后
var activeMembers = (
from member in db.ContactSet
where member.ID.ToString().Contains(activeProducts));
,但在停止包含说它具有参数无效......我不能选择activeProducts.ManufacturerID因为显然该proprety不存在,因为它返回一个IQueryable ...
底线我在这里要做的是返回一个成员列表中至少有一个积极的产品。
任何提示?
[编辑]
下面是完整的查询代码...我试图与包含在第二个表达式,LINQ的似乎不喜欢它:
Server Error in '/' Application. LINQ to Entities does not recognize the method 'Boolean Contains[String](System.Linq.IQueryable``1[System.String], System.String)' method, and this method cannot be translated into a store expression.
var activeProduct =(from product in Master.DataContext.ProductSet
where product.Active == true
&& product.ShowOnWebSite == true
&& product.AvailableDate <= DateTime.Today
&& (product.DiscontinuationDate == null || product.DiscontinuationDate >= DateTime.Today)
select product.ManufacturerID.ToString());
var activeArtists = from artist in Master.DataContext.ContactSet
where activeProduct.Contains(artist.ID.ToString())
select artist;
NumberOfArtists = activeArtists.Count();
artistsRepeater.DataSource = activeArtists;
artistsRepeater.DataBind();
[详细] ManufacturerID显然是一个可空的GUID ...
由于某些原因,ContactSet类不包含ny参考产品,我想我将不得不做一个连接查询,这里没有线索。
没有工作,得到了Linq错误。 – Erick
是的,Linq仍然不喜欢它,我刚才发现ManufacturerID是一个Guid? (可为空)......如果我做了'选择ManufacturerID。值'我有这样的:LINQ to Entities不识别方法'布尔包含[Guid](System.Linq.IQueryable'1 [System.Guid],System.Guid)'方法,并且此方法不能被转换成存储表达。 – Erick
这是否与IN运算符一样高效? – tofutim