Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 C#LINQ to objects查询根据列表更改字段值_C# 4.0_Linq To Objects - Fatal编程技术网

C# 4.0 C#LINQ to objects查询根据列表更改字段值

C# 4.0 C#LINQ to objects查询根据列表更改字段值,c#-4.0,linq-to-objects,C# 4.0,Linq To Objects,我有以下目标 objItem (id,name,qty) - list<items> objSel(selId) - list<int> 对象(id、名称、数量)-列表 objSel(selId)-列表 objSel.selId是objItem的选定项id 如何编写LINQ查询,以便在未选择项目时将项目数量更改为0并返回objItem。您的伪代码非常混乱,但我怀疑您需要类似以下内容: List<Item> items = ...; List

我有以下目标

 objItem (id,name,qty)  - list<items>
 objSel(selId)      - list<int>
对象(id、名称、数量)-列表 objSel(selId)-列表 objSel.selId是objItem的选定项id


如何编写LINQ查询,以便在未选择项目时将项目数量更改为0并返回objItem。

您的伪代码非常混乱,但我怀疑您需要类似以下内容:

List<Item> items = ...;
List<int> selectedIds = ...;

foreach (var item in items.Where(x => !selectedIds.Contains(x.Id)))
{
    item.Quantity = 0; // Property name adjusted for readability and convention
}
列表项=。。。;
列表SelectedDS=。。。;
foreach(items.Where(x=>!selectedds.Contains(x.Id))中的变量项)
{
item.Quantity=0;//根据可读性和约定调整了属性名称
}
为提高效率,请对所选ID使用
HashSet


请注意,执行更改的不是LINQ查询-查询只提供需要更改的项。虽然您可以滥用LINQ来更改数据,但这样做是个坏主意。线索就在“查询”这个词里——它是关于提问的。你如何处理这个问题的答案是另一回事。

我已经写了一个答案,但如果不是你想要的,请进一步澄清这个问题。理想情况下,显示真实代码而不是伪代码。Jon,我认为我们可以使用LINQ来过滤和更改字段值。如果这是最好的方法,我会选择这个。谢谢。Jon,我想我们可以使用LINQ来过滤和更改字段值。如果这是最好的方法,我会选择这个。谢谢。@Wilz:你可以,但这不是它的设计目的——基本上,你必须和LINQ战斗才能做到这一点。现在,如果您要重新设计,以便不更改现有对象,而是基于现有对象和某些条件创建新对象,那将是另一回事。