我有网络搜索但我仍然无法找到一个简单的答案.有人可以解释(用简单的英文)是什么GroupJoin
?它与普通的内心有什么不同Join
?它常用吗?它只适用于方法语法吗?查询语法怎么样?一个c#代码示例会很好.
我继承了一个没有完全优化设计的数据库,我需要操作一些数据.让我对我必须做的事情做一个更常见的比喻:
假设我们有一张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#
我有一个代表图像的模型
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) 我正在尝试使用list.Union
in 合并两个列表,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) 假设我有两个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魔法.
如果我有,例如以下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) 我有一个包含以下属性的类:
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) 我是这样的表结构
描述:
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) 我正在尝试进行一个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# ×10
linq ×9
.net ×2
join ×2
compare ×1
linq-to-sql ×1
list ×1
models ×1
object ×1
outer-join ×1