相关疑难解决方法(0)

如何在Entity Framework中执行条件包含

我目前正在使用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)

有帮助吗?我想我可能会错过这里非常简单的事情.

c# entity-framework

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

如何在sql中使用的linq中使用Left join?

如何在编写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)

c# sql linq

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

如何使用LINQ连接多个表

我正试图用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)

c# linq asp.net-mvc join

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

在 C# 上使用 where 条件子句与 linq 进行左/外连接

我有 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 …

c# linq sql-server left-join asp.net-core-2.0

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

Linq to SQL使用Lambda语法并在2列上进行了左外部联接(复合联接键)

我正在尝试使用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外部联接。

如何在LINQ中在单个联接中的多个字段上进行联接

LINQ to SQL-具有多个联接条件的左外部联接 …

c# sql-server asp.net lambda linq-to-sql

5
推荐指数
2
解决办法
1859
查看次数

加入 LINQ 查询语法:从右侧向左移动

我有一个场景,我需要加入两个表:

一种

|---------------------|------------------|
|          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)

c# linq linq-to-entities join linq-query-syntax

5
推荐指数
0
解决办法
111
查看次数

使用 `groupjoin` 的查询无法翻译,尽管它被证明是受支持的

我不明白为什么这不翻译。这似乎正是这里描述的用例。

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 的原因。

但后来我的问题变成了:如何在不需要导航属性的情况下实现我正在寻找的结果?

entity-framework-core

3
推荐指数
2
解决办法
534
查看次数

即使外键为 NULL 也加入两个数据表

我的应用程序中有 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)

c# linq

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

LINQ EF Core 左连接

这里有一个问题: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 entity-framework

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

LINQ查询中的左外连接

可能重复:
LINQ中的LEFT OUTER JOIN

如何使用左外连接进行LINQ查询?

c# linq

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

在linq中连接具有多个条件的两个表

我是 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)

c# linq

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

c# lambda 如果它不为 null,则采用 FirstOrDefault 属性

我需要检查 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# lambda

-1
推荐指数
1
解决办法
2068
查看次数