我目前正在使用EF而且我有两张桌子,Employees并且Orders鉴于它Employee有多个Orders.
我需要在EF中执行一个查询,它会为我提供所有Employees相关的列表Orders,但只包含两个日期之间的查询.如果在给定时间内Employee没有执行任何操作Order,他的Orders列表将为空.
我想我需要从EmployeesDbSet 开始我的查询,但是如何为Orders属性分配条件?
我试图这样做,但显然它没有用.
public List<Employee> GetAllByIdListAndDateRange(int[] ids, DateTime fromDate, DateTime toDate)
{
var query = _context.Set<Employee>().Where(a => ids.Contains(a.EmployeeID)).Include(a => a.Orders.Where(o.OrderDate <= toDate && o.OrderDate >= fromDate));
return query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
有帮助吗?我想我可能会错过这里非常简单的事情.
如何在编写SQL查询的Linq中使用左联接?
select
p.Name, p.Family,
E.EmployTypecode, E.employtypeName, E.EmplytyppeTye
from
personnel as p
left join
Employee as E on E.EmployTypecode = p.EmployTypecode
Run Code Online (Sandbox Code Playgroud) 我正试图用LINQ连接三个表.我的SQL工作如下:
Select j.Id, u.FirstName , u.LastName, u.Role
From Job j
left join JobTranslator as jt on j.Id = jt.JobId
left join JobRevisor as jr on j.Id = jr.JobId
left join [User] as u on jt.UserId = u.Id OR jr.UserId = u.Id
Where u.Id = someID;
Run Code Online (Sandbox Code Playgroud)
我可以使用下面的两个连接来使用它:
IQueryable<Job> jobs =
from j in _db.Jobs
join jr in _db.JobRevisors on j.Id equals jr.JobId into jrs
from jrResult in jrs.DefaultIfEmpty()
join u in _db.Users on jrResult.UserId equals u.Id into jrU
from jrUResult in …Run Code Online (Sandbox Code Playgroud) 我有 2 个表需要加入查询。第一个表是条目表,其中包含某些事件,例如舞蹈、说话、唱歌、播放等。
Id|Name
1|Dance
2|Sing
3|Speak
4|Play
5| etc.
Run Code Online (Sandbox Code Playgroud)
另一个表包含 userEntries,它指示每个用户在每个事件上的分数
Id| UserId|EntryId|Score
1|898128 | 1 |200
2|827329 | 2 |120
3|898128 | 2 |100
Run Code Online (Sandbox Code Playgroud)
现在我想要一个 linq 查询,首先获取所有条目,然后获取给定用户的分数,为条目重新调整 null 为用户有 noscore 的条目分数
用户 898128 的示例,我想看到这样的内容
Dance:200,Speak:null,Sing:120 从结果
我尝试了以下 linq 查询,但结果为空
var userScores =
(from e in db.Entries join se in db.UserEntries
on e.Id equals se.EntryId
into ese from se in
ese.DefaultIfEmpty()
where se.UserId == "898128"
select new
{
EntryLabel=e.Label,
EntryValue=se.ValueAmount,
}).ToList();
ViewData["userScores "] = userScores;
Run Code Online (Sandbox Code Playgroud)
我在 ASP.NET 核心 2.0 …
我正在尝试使用Linq to SQL作为Lambda表达式在2列上进行内部联接。普通查询如下所示。
SELECT * FROM participants
LEFT OUTER JOIN prereg_participants ON prereg_participants.barcode = participants.barcode
AND participants.event_id = prereg_participants.event_id
WHERE (participants.event_id = 123)
Run Code Online (Sandbox Code Playgroud)
我成功地在左列上使用以下代码进行了联接。
var dnrs = context.participants.GroupJoin(
context.prereg_participants,
x => x.barcode,
y => y.barcode,
(x, y) => new { deelnr = x, vi = y })
.SelectMany(
x => x.vi.DefaultIfEmpty(),
(x, y) => new { deelnr = x, vi = y })
.Where(x => x.deelnr.deelnr.event_id == 123)
.ToList();
Run Code Online (Sandbox Code Playgroud)
问题在于,使用上述Lambda时,我得到了太多结果,因为它缺少AND participants.event_id = prereg_participants.event_id零件。但是,无论我怎么努力,我都没有得到正确数量的参与者。
我查看了以下现有问题,但是在编写正确的lambda时没有一个解决了我的问题。而且大多数解决方案都是lambda格式的nog或不是多列上的Left外部联接。
我有一个场景,我需要加入两个表:
一种
|---------------------|------------------|
| ID | Name |
|---------------------|------------------|
| 1 | John |
|---------------------|------------------|
| 2 | Matt |
|---------------------|------------------|
| 3 | Emma |
|---------------------|------------------|
Run Code Online (Sandbox Code Playgroud)
乙
|---------------------|------------------|
| ID | Text |
|---------------------|------------------|
| 1 | blah blah John |
|---------------------|------------------|
| 2 | this is some data|
|---------------------|------------------|
| 3 | My name is Jeff |
|---------------------|------------------|
Run Code Online (Sandbox Code Playgroud)
我需要使用 LINQ 的查询语法来连接这两个表。
左表需要是表A。
虽然我需要根据“文本”列是否包含表 A 中“名称”列中的文本来加入。
代码应如下所示:
var result = from ta in A
join tb in B on …Run Code Online (Sandbox Code Playgroud) 我不明白为什么这不翻译。这似乎正是这里描述的用例。
LINQ 表达式
DbSet<A>()
.GroupJoin(
inner: DbSet<B>(),
outerKeySelector: a => a.AId,
innerKeySelector: b => b.AId,
resultSelector: (a, bs) => new {
a = a,
bs = bs
})
Run Code Online (Sandbox Code Playgroud)
产生错误:
无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用,显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
产生异常的 LINQ 代码是
DbSet<A>()
.GroupJoin(
inner: DbSet<B>(),
outerKeySelector: a => a.AId,
innerKeySelector: b => b.AId,
resultSelector: (a, bs) => new {
a = a,
bs = bs
})
Run Code Online (Sandbox Code Playgroud)
编辑:也许我误解了文档,这是一个不翻译的例子。
执行类似于以下示例的查询会生成 Blog & IEnumerable 的结果。由于数据库(尤其是关系数据库)无法表示客户端对象的集合,因此 GroupJoin 在许多情况下不会转换为服务器。它要求您从服务器获取所有数据以在没有特殊选择器的情况下执行 GroupJoin(下面的第一个查询)。但是,如果选择器限制选择的数据,那么从服务器获取所有数据可能会导致性能问题(下面的第二个查询)。这就是 EF Core 不翻译 GroupJoin 的原因。
但后来我的问题变成了:如何在不需要导航属性的情况下实现我正在寻找的结果?
我的应用程序中有 2 个数据表。第一个 DataTable 被调用Table1,看起来像这样
-------------------------------------
| Key | Column1 | Column2 | Foreign |
|-----------------------------------|
| 0 | dsfsfsd | sdfsrer | 1 |
|-----------------------------------|
| 1 | dertert | qweqweq | NULL |
|-----------------------------------|
| 2 | prwersd | xzcsdfw | 3 |
-------------------------------------
Run Code Online (Sandbox Code Playgroud)
第二个被调用Table2,看起来像这样
----------------------------------------
| Key | Column3 | Column4 | Column5 |
|--------------------------------------|
| 1 | dsfsfsd | sdfsrer | fghfghg |
|--------------------------------------|
| 3 | prwersd | xzcsdfw | nbmkuyy …Run Code Online (Sandbox Code Playgroud) 这里有一个问题:LEFT OUTER JOIN in LINQ,但这是专门询问的有关 Linq-to-Objects 的问题。这个问题是关于 Linq-to-Entity 的。
我有一个内部联接,我想将其变成外部联接:
alumni = alumni.Join(_context.AlumniSurvey, a => a.Uid, s => s.Uid, (a, s) => new { a, s })
.Where(x => x.s.UniversityNumber != x.s.Uid)
.Select(x => x.a);
Run Code Online (Sandbox Code Playgroud)
并不是说我只是回国的校友;我包含 AlumniSurvey 是因为我将根据用户在索引视图中选择的内容执行各种 where 子句
我是 LinQ 的新手,在执行 Linq 语句时遇到了一些问题。下面是相同的总结。
我有两个具有相同类类型的类对象,例如:Report r1、Report r2,它们具有月份、ID、值等值。两个对象的值不同。例如:
List<Report> r1 = new List<Report>();
List<Report> r2 = new List<Report>();
r1.Add(new Report { month = 1, ID = 1, a = 5, b = 12 });
r1.Add(new Report { month = 1, ID = 2, a = 6, b = 13 });
r1.Add(new Report { month = 2, ID = 1, a = 6, b = 14 });
r1.Add(new Report { month = 2, ID = 2, a = 8, b = …Run Code Online (Sandbox Code Playgroud) 我需要检查 FirstOrDefault() 是否不为空,如果不为空,则获取一些属性。我最好的选择是:
var results = Database.Set<Pizzas>().Select(x => new PizzaViewModel
{
Base = Database.Set<Bases>().FirstOrDefault(y => y.Id == x.Base.Id) != null ? Database.Set<Bases>().FirstOrDefault(y => y.Id == x.Base.Id).Name : null
}).ToList();
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
c# ×10
linq ×8
join ×2
lambda ×2
sql-server ×2
asp.net ×1
asp.net-mvc ×1
left-join ×1
linq-to-sql ×1
sql ×1