C# LINQ-如何创建不同项的列表

C# LINQ-如何创建不同项的列表,c#,linq,C#,Linq,如何进行LINQ查询以从Workpacks表返回不同运算符的新列表(DB未规范化)。我得到了这个查询,但我不知道如何正确使用DISTINCT,这样SQLServer就不会返回重复的值 Instance.CriteriaOperatorList = (from v in context.Workpacks select new FilterCriteriaItem() { GUID = Guid.NewGuid(), Name =

如何进行LINQ查询以从Workpacks表返回不同运算符的新列表(DB未规范化)。我得到了这个查询,但我不知道如何正确使用DISTINCT,这样SQLServer就不会返回重复的值

Instance.CriteriaOperatorList = 
    (from v in context.Workpacks
     select new FilterCriteriaItem()
     {
         GUID = Guid.NewGuid(),
         Name = v.Operator,
     }).ToList();

只需在.To list()之前使用.Distinct()。

您想从
工作包中获取Distinct
操作符,然后获取它们。最简单的方法是不使用SQLLINQ语法

Instance.CriteriaOperatorList = context.Workpacks
                                       // Only request the Operator names
                                       .Select(w => w.Operator)
                                       // But just request the distinct names
                                       .Distinct()
                                       // Then select into your DTO.
                                       .Select(o => new FilterCriteriaItem
                                       {
                                           GUID = Guid.NewGuid(),
                                           Name = o // o is the Operator from Workpack
                                       })
                                       .ToList();

这取决于您想要在哪个集合上
区分
,工作包?或者您的
选择的输出
?这是实体的LINQ吗?什么部分应该是不同的?您返回的对象都是唯一的,因为它们有不同的GUID…抱歉。。。来自Workpacks表的不同运算符-DB未规范化,并且运算符名称存储在Workpacks表中,不像使用GroupBy with first那样唯一,后者等效于distinct:nstance.CriteriaOperatorList=context.Workpacks.Select(v=>new FilterCriteriaItem(){GUID=GUID.NewGuid(),Name=v.Operator}).GroupBy(x=>new{GUID=x.GUID,Name=x.Name}).选择(x=>x.First()).ToList();OP在创建新的
FilterCriteriaItem