相关疑难解决方法(0)

LINQ对特定属性的Distinct()

我正在玩LINQ来了解它,但是当我没有一个简单的列表时,我无法弄清楚如何使用Distinct(一个简单的整数列表很容易做到,这不是问题).我想在对象的一个多个属性上使用对象列表中的区别

示例:如果对象是Person,则使用Property Id.如何获取所有Person并使用对象Distinct的属性Id

Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到Person1和Person3?那可能吗?

如果LINQ不可能,那么Person在.NET 3.5 中依赖于某些属性的列表最好的方法是什么?

c# linq distinct .net-3.5

1002
推荐指数
15
解决办法
80万
查看次数

在IEqualityComparer中包装委托

几个Linq.Enumerable函数需要一个IEqualityComparer<T>.是否有一个方便的包装类适应delegate(T,T)=>bool实现IEqualityComparer<T>?编写一个很容易(如果你忽略了定义正确的哈希码的问题),但我想知道是否有开箱即用的解决方案.

具体来说,我想对Dictionarys 进行集合操作,仅使用Keys来定义成员资格(同时根据不同的规则保留值).

.net linq delegates

125
推荐指数
7
解决办法
4万
查看次数

Linq中的区别仅基于表的一个字段

我试图在Linq中使用.distinct来获取基于表的一个字段的结果(因此不需要表中的整个重复记录).

我知道使用distinct来编写基本查询,如下所示:

var query = (from r in table1
orderby r.Text
select r).distinct();
Run Code Online (Sandbox Code Playgroud)

但我需要r.text不重复的结果.

c# sql linq

114
推荐指数
5
解决办法
13万
查看次数

LINQ,无法创建XXX类型的常量值.在此上下文中仅支持基元类型或枚举类型

在我的应用程序中,我有讲师,他们有可以教授的课程列表,当我删除课程时,我想删除与讲师的联系.这是代码:

public void RemoveCourse(int courseId)
{
    using (var db = new AcademicTimetableDbContext())
    {
        var courseFromDb = db.Courses.Find(courseId);

        var toRemove = db.Lecturers
                        .Where(l => l.Courses.Contains(courseFromDb)).ToList();

        foreach (var lecturer in toRemove)
        {
            lecturer.Courses.Remove(courseFromDb);
        }

        db.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我明白了

NotSupportedException:无法创建类型的常量值Course.在此上下文中仅支持基元类型或枚举类型.

我究竟做错了什么?

c# linq entity-framework

62
推荐指数
2
解决办法
7万
查看次数

我可以指定内联显式类型比较器吗?

因此,.NET 3.0/3.5为我们提供了许多查询,排序和操作数据的新方法,这要归功于LINQ提供的所有简洁功能.有时,我需要比较没有内置比较运算符的用户定义类型.在许多情况下,比较非常简单 - 比如foo1.key?= foo2.key.我可以使用匿名委托/ lambda函数简单地指定内联比较,而不是为该类型创建新的IEqualityComparer吗?就像是:

var f1 = ...,
    f2 = ...;
var f3 = f1.Except(
           f2, new IEqualityComparer(
             (Foo a, Foo b) => a.key.CompareTo(b.key)
           ) );
Run Code Online (Sandbox Code Playgroud)

我很确定上面的内容实际上并不奏效.我只是不想让整个班级做一些"沉重"的事情只是为了告诉程序如何比较苹果和苹果.

.net c# linq lambda

57
推荐指数
6
解决办法
4万
查看次数

如何通过Lambda或LINQ从列表中获取不同的实例

我有一个这样的课:

class MyClass<T> {
    public string value1 { get; set; }
    public T objT { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及这个班级的清单.我想使用.net 3.5 lambda或linq来获取不同value1的MyClass列表.我想这可能比在.net 2.0中缓存这样的列表的方式简单得多:

List<MyClass<T>> list; 
...
List<MyClass<T>> listDistinct = new List<MyClass<T>>();
foreach (MyClass<T> instance in list)
{
    // some code to check if listDistinct does contain obj with intance.Value1
    // then listDistinct.Add(instance);
}
Run Code Online (Sandbox Code Playgroud)

lambda或LINQ的做法是什么?

c# linq lambda .net-3.5

28
推荐指数
2
解决办法
6万
查看次数

使用IEqualityComparer for Union

我只是想从两个列表中删除重复项并将它们组合成一个列表.我还需要能够定义重复的内容.我通过ColumnIndex属性定义副本,如果它们相同,则它们是重复的.这是我采取的方法:

我找到了一个很好的例子,说明如何为代码段中只需要一次的随机场所编写内联比较器.

public class InlineComparer<T> : IEqualityComparer<T>
{
    private readonly Func<T, T, bool> getEquals;
    private readonly Func<T, int> getHashCode;

    public InlineComparer(Func<T, T, bool> equals, Func<T, int> hashCode)
    {
        getEquals = equals;
        getHashCode = hashCode;
    }

    public bool Equals(T x, T y)
    {
        return getEquals(x, y);
    }

    public int GetHashCode(T obj)
    {
        return getHashCode(obj);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我只有两个列表,并尝试使用比较器对它们进行联合.

            var formatIssues = issues.Where(i => i.IsFormatError == true);
            var groupIssues = issues.Where(i => i.IsGroupError == true);

            var dupComparer = new InlineComparer<Issue>((i1, i2) => i1.ColumnInfo.ColumnIndex …
Run Code Online (Sandbox Code Playgroud)

c# linq iequalitycomparer

13
推荐指数
2
解决办法
1万
查看次数

LINQ从列表中的列表中获取唯一项

List的类型MyObject有以下定义:

class MyObject {
     public string ListName { get; set; }
     public IEnumerable<OtherObject> ObjectList { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

给定一个List类型MyObject,使用LINQ我应该使用什么表达式来获得所有不同的OtherObject

我正打算做的是循环的每个MyObject并获得不同的OtherObjectObjectList属性,但然后我需要在整个列表中的不同.

请注意,如果: MyObject[0].Objectlist[0] == 'ItemA'MyObject[1].Objectlist[0] == 'ItemA'它仍然会返回的单个实例ItemA.此代码仅是一种表示形式.顺便说一句,这不是我访问我的对象的方式.

c# linq ienumerable list distinct

8
推荐指数
1
解决办法
6155
查看次数

LINQ - 价值区分?

代码:

news = (from New myNew in new News()
       select myNew).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

但是这个区别是具有相同值的"对象".myNew每个月我都需要在我的名单中.(一个用于一月,一个用于februaru,依此类推).比,news将获得12记录.

有可能是某种Distinct(myNew.Month)

.net c# linq

6
推荐指数
3
解决办法
1万
查看次数

如何编写LINQ查询以仅基于特定属性检索不同的记录?

我有对象的数组,DataTestplans从中我尝试检索特定的记录DataID,并ProductID使用所示的LINQ查询,我目前的查询有Distinct()哪些用于区分所有5点提到的属性,我该如何找回基于性能不重复的记录DataID,TestPlanName,TCIndexListProductID

DataTestplans: -

[
    {
    "DataTestPlanID": 0,
    "DataID": 19148,
    "TestPlanName": "string",
    "TCIndexList": "string",
    "ProductID": 2033915
  },
    {
    "DataTestPlanID": 0,
    "DataID": 19148,
    "TestPlanName": "string",
    "TCIndexList": "string",
    "ProductID": 2033915
  },
      {
    "DataTestPlanID": 0,
    "DataID": 19149,
    "TestPlanName": "string",
    "TCIndexList": "string",
    "ProductID": -2642
  }

]
Run Code Online (Sandbox Code Playgroud)

LINQ

            DataTestPlans_DataID_ProductID = DataTestPlans.Where(c => c.DataID == DataID_ProductID_Record.DataID && c.ProductID == DataID_ProductID_Record.ProductID).Distinct();
Run Code Online (Sandbox Code Playgroud)

c# linq

5
推荐指数
1
解决办法
463
查看次数