我知道很容易将lambda表达式放在下面的行中,但是因为我是新的我不知道。 在下面的代码coupon.products有大约27000个产品,在下面我必须添加条件如
where p.id not in (1,2,3)
int[] productIds = (from p in coupon.Products select p.Id).ToArray<int>();
我应该如何添加另外我应该如何优化我的代码?
我曾尝试过
int[] productIds = (from p in coupon.Products select p.Id).ToArray<int>().Where(i => i.Id not in (1,2));
试图这不起作用
List<int> excludedItems = new List<int>();
foreach (BasketItem item in basket.Items)
{
excludedItems.Add(item.Product.Id);
}
// int[] excluded = new int[] { 1, 2, 3 };
int[] productIds = coupon.Products.Where(p => excludedItems.Contains(p.Id))
.Select(p => p.Id)
.ToArray();
答案 0 :(得分:3)
如果你想在C#中使用类似SQL的语法,你需要在from
之后添加它:
int[] excluded = new int[] { 1, 2, 3 };
int[] productIds = (from p in coupon.Products
where !excluded.Contains(p.id)
select p.Id
).ToArray();
此外,它不是真正的SQL,因此not in
无效。改为使用C#等价物(!Contains
)。
当您想使用LINQ扩展方法时也一样:
int[] excluded = new int[] { 1, 2, 3 };
int[] productIds = coupon.Products.Where(p => !excluded.Contains(p.id))
.Select(p => p.id)
.ToArray();
答案 1 :(得分:3)
我个人Select
首先获得Id
,然后进一步的操作可能更快。然后,您可以使用Except
代替Where
,最后在其上调用ToArray
。
int[] excludedIds = new int[] { 1, 2, 3 };
int[] productIds = coupon.Products.Select(p => p.Id)
.Except(excludedIds)
.ToArray();
您的代码问题来自以下部分:
.ToArray<int>().Where(i => i.Id not in (1,2));
首先,您致电ToArray
然后Where
,Where
将返回IEnumerable
,您需要一个数组。其次,您select
上的Id
,然后在您需要Where
时尝试访问i
中的not in
。最后,当您需要!(new int[] { 1, 2 }).Contains(i)
时,可以使用Productcommaitems
,尽管不能很好地阅读并且在每次检查上创建数组都会很昂贵。
根据您更新的问题,string
是一个int[]
,其中包含以逗号分隔的整数列表。您需要Split
,可以使用Parse
和 int[] excludedItems = Productcommaitems.Split(',')
.Select(Int32.Parse)
.ToArray();
:
excludedItems
或者更好的是直接创建List<int> excludedItems = new List<int>();
foreach (BasketItem item in basket.Items)
{
excludedItems.Add(item.Product.Id);
}
:
let url = "http://apple.com"
let requestURL = URL(string:url)
let request = URLRequest(url: requestURL!)
webView.delegate = self
webView.loadRequest(request)
}
func webViewDidStartLoad(_ webView: UIWebView) {
print("Webview started Loading")
}
func webViewDidFinishLoad(_ webView: UIWebView) {
print("Webview did finish load")
}
答案 2 :(得分:1)
你可以试试
int[] array = new int[] { 1, 2, 3 };
int[] ids = coupon.Products.Where(t => !array.Contains(t.id)).Select(t => t.id).ToArray<int>();
答案 3 :(得分:0)
您可以像这样使用C#Linq语法
int[] filterOut = new int[] {1,2,3};
int[] productIds = coupon.Products.Where(x => !filterOut.Contains(x.Id).Select(x => x.Id).ToArray();