gpt4 book ai didi

c# - "IN"Linq 运算符

转载 作者:可可西里 更新时间:2023-11-01 08:04:18 26 4
gpt4 key购买 nike

我在这里尝试使用 Entity Framework 在 Linq 中转换旧的原始 Sql 查询。

它对项目集合使用 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));

但它停在 contains 处,说它有无效的参数...我无法选择 activeProducts.ManufacturerID,因为显然属性不存在,因为它返回一个 IQueryable...

我在这里尝试做的底线是返回至少拥有一个事件产品的成员列表。

有什么提示吗?

[编辑]

这是完整的查询代码...我尝试在第二个表达式中包含 contains,Linq 似乎不喜欢它:

“/”应用程序中的服务器错误。
LINQ to Entities 无法识别 'Boolean Contains[String](System.Linq.IQueryable``1[System.String], System.String)' 方法,并且此方法无法转换为存储表达式。

    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 类不包含对产品的任何引用,我想我将不得不进行连接查询,这里没有任何线索。

最佳答案

var activeMembers = (
from member in db.ContactSet
where activeProducts.Select(x=>x.ID).Contains(member.ID));

关于c# - "IN"Linq 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com