我有实体Group和User.
该Group实体拥有Users财产是用户的列表.
用户有一个名为的属性IsEnabled.
我想编写一个返回Groups 列表的linq查询,该列表只包含Users IsEnabled为true 的s .
例如,对于类似下面的数据,
AllGroups
组A
用户1(IsEnabled = true)
用户2(IsEnabled = true)
用户3(IsEnabled = false)
B组
用户4(IsEnabled = true)
用户5(IsEnabled = false)
用户6(IsEnabled = false)
我想得到
FilteredGroups
A组
用户1(IsEnabled = true)
用户2(IsEnabled = true)
B组
用户4(IsEnabled = true)
我尝试了以下查询,但Visual Studio告诉我
[不能将属性或索引器'用户'分配给它 - 它是只读的]
FilteredGroups = AllGroups.Select(g => new Group()
{
ID = g.ID,
Name = g.Name,
...
Users = g.Users.Where(u …Run Code Online (Sandbox Code Playgroud) 我在LINQ查询中为包含的项添加一些过滤条件有些困难.我的查询是这样的
var item = _Context.Order.Include("Inner")
.Include("Inner.first")
.Include("Inner.second")
.Where(x => ( !(x.IsDeleted) && (x.IsActive) &&
(x.itemid == id))).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,"Inner"是另一个项目列表.现在我需要过滤内部项目.我只需要内部项目,过滤条件为inner.isDeleted = true.
查询应该返回一个类,
public class Order
{
public string Name { get; set; }
public List<InnerDetails> Inner{ get; set; }
public bool IsDeleted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和InnerDetails类一样
public class InnerDetails
{
public string Sample { get; set; }
public bool IsDeleted { get; set; }
public int firstId { get; set; }
public int secondID { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 我试图从EntityFramework中的显式加载过滤结果.
当我不应用任何过滤器但是在应用过滤器后它不加载结果时,显式加载有效.
类
public partial class Student
{
public int StudentId { get; set; }
public int CourseId { get; set; }
public string Name { get; set; }
public string Status { get; set; }
public virtual ICollection<Grade> Grades { get; set; }
}
public partial class Grade
{
public int GradeId { get; set; }
public string Value { get; set; }
public string Status { get; set; }
public virtual ICollection<Student> Students { get; set; }
} …Run Code Online (Sandbox Code Playgroud) 使用实体框架(代码优先),我试图映射以下两个实体之间的条件/过滤关系:
构建
BuildingId
BuildingName
Area
AreaId
ParentId
AreaName
IsSubArea
一个建筑可以有许多地区
的区域可以有多个(次)地区
我想创建建筑和区域之间的关系,其中标有'IsSubArea'的区域被过滤掉.在此上下文中,ParentId将与Building相关,否则,ParentId将是另一个Area.这将允许我创建具有许多区域的建筑物,并且每个区域可以具有许多子区域,从而创建树形结构.
与我发现的解决方案最接近的是"软删除"功能(来源):
modelBuilder.Entity<Foo>().Map(m => m.Requires("IsDeleted").HasValue(false));
Run Code Online (Sandbox Code Playgroud)
转换为适合我的例子:
modelBuilder.Entity<Area>().Map(m => m.Requires("IsSubArea").HasValue(false));
Run Code Online (Sandbox Code Playgroud)
但据我所知,这与建筑物的关系无关.
另一种解决方案是在Building上创建一个属性,该属性指定用于返回相关区域的查询定义(源):
public class Building
{
public int BuildingId {get; set;}
public string BuildingName {get; set;}
public IQueryable<Area> BuildingAreas
{
get
{
return from area in areas
where area.IsSubArea == false
and area.ParentId == BuildingId
select area;
//Assume I have …Run Code Online (Sandbox Code Playgroud) 如何对父子关系进行急切查询:
如果我试试
from p in _context.Parents.Include("children")
join c in _context.childrenon p.Id equals c.ParentId
where d.DeletedDate == null
orderby p.Name ascending, c.Name
select p
Run Code Online (Sandbox Code Playgroud)
然后我得到了Parent对象,但是每个Parent对于孩子都有NULL
如果我试试
from p in _context.Parents.Include("children")
orderby p.Name ascending
select p
Run Code Online (Sandbox Code Playgroud)
查询将返回所有父项和子项,但不会对其进行过滤或排序.
我想要的结果是IEnumerable<Parent>
ie
Parent[0].name = "foo"
Parent[0].children = IEnumerable<Child>
Parent[1].name = "bar"
Parent[1].children = IEnumerable<Child>
Run Code Online (Sandbox Code Playgroud)