相关疑难解决方法(0)

Linq to Entities加入vs groupjoin

我有网络搜索但我仍然无法找到一个简单的答案.有人可以解释(用简单的英文)是什么GroupJoin?它与普通的内心有什么不同Join?它常用吗?它只适用于方法语法吗?查询语法怎么样?一个c#代码示例会很好.

c# linq linq-to-entities

164
推荐指数
2
解决办法
9万
查看次数

如何在Linq中进行完全外连接?

我继承了一个没有完全优化设计的数据库,我需要操作一些数据.让我对我必须做的事情做一个更常见的比喻:

假设我们有一张Student桌子,一张StudentClass桌子记录了他参加的所有课程,还有一张StudentTeacher桌子可以存储教授这名学生的所有老师.是的,我知道这是一个愚蠢的设计,将老师存放在Class表上更有意义 - 但这就是我们正在使用的.

我现在想要清理数据,我想找到一个学生有老师但没有上课但是上课但没有老师的所有地方.SQL因此:

select *
from StudentClass sc
full outer join StudentTeacher st on st.StudentID = sc.StudentID
where st.id is null or sc.id is null
Run Code Online (Sandbox Code Playgroud)

你是怎么在Linq那样做的?

c# linq outer-join linq-to-sql full-outer-join

36
推荐指数
3
解决办法
4万
查看次数

比较两个对象列表,以便在特定属性上进行更新,更改,更新

我一直在尝试和失败一段时间找到一个解决方案来比较基于对象属性的对象列表.我已经阅读了其他类似的解决方案,但它们要么不合适(或者我不理解答案!).

代码是C#

我有一个代表图像的模型

public class AccommodationImageModel
{
    public int Id { get; set; }
    public string Path { get; set; }
    public string Caption { get; set; }
    public string Description { get; set; }
    public bool CoverImage { get; set; }
    public bool Visible { get; set; }     
}
Run Code Online (Sandbox Code Playgroud)

我有两个这个模型的列表.一个是现有列表,另一个是更新列表.我需要比较两个列表,看看哪些已被删除,更新或是新的.

我不需要比较整个对象,只需在它们的属性Id上进行比较.

List<AccommodationImageModel> masterList;
List<AccommodationImageModel> compareList;
Run Code Online (Sandbox Code Playgroud)

如果compareList包含Id = 0的任何AccommodationImageModel,则它们是新的,因为新条目尚未分配Id.

要删除

如果masterList包含任何具有不在compareList中的Ids的AccommodationImageModel,那么它们将被删除,因为它们已从compareList中删除并应从masterList中删除.因此,我需要一个需要删除的列表.

要被更新

如果newList和masterList具有相同的Id,那么它们将被更新.因此,我需要一个共享相同ID的列表,所以我可以更新它们.我不太关心这些模型是否相同且不需要更新,因为每个列表只会有一个小数字,所以即使它们没有改变它们也会更新并不重要.

三个结果中的每一个都需要作为AccommodationImageModel列表返回,以便我可以执行相应的更新,删除,添加.

编辑

我在下面用我选择的ATM解决方案添加了3种测试方法,展示了它的工作实现.

测试方法

[TestMethod]
    public void Test_Deleted_Image()
    {
        // set up the masterList
        List<AccommodationImageModel> masterList …
Run Code Online (Sandbox Code Playgroud)

c# compare list object models

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

在LINQ中使用Union合并列表时删除重复项

我正在尝试使用list.Unionin 合并两个列表,LinqPad但我无法让它工作,并想检查我的理解是否正确.

鉴于这个简单的类:

public class Test 
{
   public int Id { get; set;}
   public int field1 { get; set; }

   public bool Equals(Test other)
   {        
      return this.Id.Equals(other.Id);
   }
}
Run Code Online (Sandbox Code Playgroud)

两个列表填充如下:

List<Test> list = new List<Test>();
list.Add( new Test { Id = 1, field1 = 1});
list.Add( new Test { Id = 1, field1 = 2});
list.Add( new Test { Id = 2, field1 = 3});
list.Add( new Test { Id = 2, field1 = 4});

List<Test> …
Run Code Online (Sandbox Code Playgroud)

c# linq

10
推荐指数
1
解决办法
9716
查看次数

如何基于共同属性加入两个列表

假设我有两个Lists<myObject>地方myObject由两个属性

Id(类型Int)和

价值(类型Double)

我需要从这两个列表中获取一个由(匿名)对象组成的列表:

Id, [Double value from List 1], [Double value from List 2]
Run Code Online (Sandbox Code Playgroud)

因此,如果对于给定的Id,两个列表都包含值,则它应该如下所示:

12, 21.75, 19.87
Run Code Online (Sandbox Code Playgroud)

如果一个列表不包含具有另一个列表中存在的Id的对象,则该值应为null:

15, null, 22.52
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点? 更新:当然,我知道如何获得这样的列表,但我正在寻找最高性能的方法,最好使用一些机智的Linq魔法.

.net c# linq

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

对齐多个排序列表

如果我有,例如以下List<int>s

{ 1, 2, 3, 4 } //list1
{ 2, 3, 5, 6 } //list2
...
{ 3, 4, 5 }    //listN
Run Code Online (Sandbox Code Playgroud)

检索以下相应List<int?>s 的最佳方法是什么?

{    1, 2,    3,    4,    null, null } //list1
{ null, 2,    3,    null, 5,    6    } //list2
...
{ null, null, 3,    4,    5,    null } //listN
Run Code Online (Sandbox Code Playgroud)

c# linq

9
推荐指数
1
解决办法
661
查看次数

使用LINQ合并2个列表并汇总多个属性

我有一个包含以下属性的类:

public class SomeClass()
{
public Int32 ObjectId1 {get;set;}
public Int32 ObjectId2 {get;set;}
public Int32 ActiveThickeness {get;set;}
public Int32 ActiveFilterThickness {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我还有2个列表:

List<SomeClass> A
List<SomeClass> B
Run Code Online (Sandbox Code Playgroud)

列表A有数据:

| ObjectId1 | ObjectId2 | ActiveThickness | ActiveFilterThickness |
-------------------------------------------------------------------
|     1     |     3     |       50        |           0           |
 ------------------------------------------------------------------
|     1     |     2     |       400       |           0           |
-------------------------------------------------------------------
|     4     |    603    |       27        |           0           |
-------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

清单B有数据:

| ObjectId1 | ObjectId2 | ActiveThickness | ActiveFilterThickness |
-------------------------------------------------------------------
| …
Run Code Online (Sandbox Code Playgroud)

.net c# linq

7
推荐指数
1
解决办法
4199
查看次数

EF Core如何选择具有多对多关系的实体

我是这样的表结构

  1. 用户
  2. user_profiles
  3. 型材

描述:

user有许多用户配置文件,user_profile表连接用户和配置文件表.(用户和配置文件表之间存在多对多的关系)

用户>一个一对多> user_profiles>一个对一>型材

user> many user_profiles>一个配置文件

问题:

如何使用linq选择具有配置文件的用户.

样品:

var user=cbContext.user.include("user_profiles").include("profiles").Where(predicate).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework entity-framework-core

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

Linq使用自定义比较器左外连接

我正在尝试进行一个left outer join也有一个查询custom comparator.

我有以下列表:

List<ColumnInformation> list1;
List<ColumnInformation> list2;
Run Code Online (Sandbox Code Playgroud)

它们包含有关SQL列(数据类型,名称,表等)的信息.我已经Equals为这个课程做了一番,并做了一个operator ==operator !=.

我知道如何进行左外连接:

var leftOuterJoin = from l1 in list1
                    join l2 in list2 on l1.objectID equals l2.objectID into temp
                    from l2 in temp.DefaultIfEmpty(new { l1.ID, Name = default(string) })
                    select new
                    {
                        l1.ID,
                        ColumnName1 = l1.Name,
                        ColumnName2 = l2.Name,
                    };
Run Code Online (Sandbox Code Playgroud)

我了解如何制作和使用自定义IEqualityComparer:

public class ColumnComparer : IEqualityComparer<ColumnInformation>
{
    public bool Equals(ColumnInformation x, ColumnInformation y)
    {
        return …
Run Code Online (Sandbox Code Playgroud)

c# linq join

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

如何在c#中进行完全外连接?

我是 C# 中 Linq 方法的新手。我正在学习连接子句,我想我理解所有三种类型的连接,即

  1. 内部联接
  2. 团体加入
  3. 左外连接

我对左外连接的理解是,它返回左源序列的所有元素,无论右序列中是否存在匹配元素。

现在我有一个场景,我想要执行左外连接,并且我想要右源序列的所有元素,无论左序列中是否有匹配元素。

我怎样才能做到这一点 ?

c# linq join

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