我不确定我喜欢linq查询语法......这不是我的偏好.但我不知道这个查询使用lambda表达式会是什么样的,有人可以帮忙吗?
from securityRoles in user.SecurityRoles
from permissions in securityRoles.Permissions
where permissions.SecurableEntity.Name == "Unit" && permissions.PermissionType.Name == "Read"
orderby permissions.PermissionLevel.Value descending
select permissions
Run Code Online (Sandbox Code Playgroud)
用户和安全角色之间存在多对多关系,这使得这种混乱更加令人困惑.
谢谢!黄绿色
我有按特定属性分组的对象列表。我需要根据其他属性对该列表进行排序,但始终需要保留分组。因此,例如,如果列表类似于:
{ id=1, partNumber = 100 }
{ id=2, partNumber = 500 }
{ id=2, partNumber = 300 }
{ id=2, partNumber = 600 }
{ id=3, partNumber = 550 }
{ id=3, partNumber = 990 }
{ id=4, partNumber = 200 }
{ id=5, partNumber = 300 }
Run Code Online (Sandbox Code Playgroud)
那么按零件号升序排序后的结果将是:
{ id=1, partNumber = 100 }
{ id=4, partNumber = 200 }
{ id=5, partNumber = 300 }
{ id=2, partNumber = 400 }
{ id=2, partNumber = 500 } …Run Code Online (Sandbox Code Playgroud) 我还是LINQ的新手,我创建了一个我觉得有点笨拙的查询.我想知道是否有任何方法可以简化它?
我的查询如下:
var agreementsMatching = _ctx.LeasingAgreements
.Where(x => x.Dealer.Id == dealer.dealerId)
.ToList();
var ag = agreementsMatching
.OrderBy(o => o.Model.Specification)
.OrderBy(o => o.Model.ModelName)
.OrderBy(o => o.Model.ModelBrand)
.OrderBy(c => c.LeasingAgreementClicks)
.GroupBy(sg => sg.Model.Specification)
.Select(sg => new { GroupId = sg.Key, Agreements = sg });
Run Code Online (Sandbox Code Playgroud)
我认为它可能不是最好的查询的原因还在于它给了我一个例外:
至少有一个对象必须实现IComparable.
我知道它发生是因为一个或多个对象没有实现IComparable接口.我只是不确定如何实际处理它.
任何帮助/提示都非常感谢这一个!
编辑:事实证明我不需要所有这些OrderBy电话.我可以这样做:
var agreementsMatching = _ctx.LeasingAgreements
.Where(x => x.Dealer.Id == dealer.dealerId)
.ToList();
var ag = agreementsMatching
.GroupBy(sg => sg.Model.Specification)
.Select(sg => new { GroupId = sg.Key, Agreements = sg });
Run Code Online (Sandbox Code Playgroud)
虽然问题现在解决了,但我还是想学习如何避免上述错误:)
可以使用LINQ的查询语法重写此方法吗?
public IEnumerable<Item> GetAllItems()
{
return Tabs.SelectMany(tab =>
{
tab.Pick();
return tab.Items;
});
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚tab.Pick()方法调用的位置.
我试图了解如何使用实体框架检查数据库中的任何表是否有数据。我可以检查一张表,但如何一次检查所有表?我们有 ef6 的选择吗?
using (var db = new CreateDbContext())
{
if(!db.FirstTable.Any())
{
// The table is empty
}
}
Run Code Online (Sandbox Code Playgroud)
任何有关如何循环实体的指针都会有所帮助。
关于LINQ查询语法...
var foo = new List<int> { 1, 2 };
var boo = from n in foo
where n > 1
select n;
Run Code Online (Sandbox Code Playgroud)
...我一直认为这种语法仅限于在IEnumerable上运行.或者至少在我了解IQueryable之前.也许IObservable也是如此.但我最近注意到一个建议,即查询语法基于duck typing.这个故事看起来并不十分令人信服,直到我发现一个专门用于LINQ to Tasks的网站.LINQ to Tasks看起来完全依赖于使用查询语法的duck typing!
好的,这里发生了什么?查询语法是否使用duck typing?当我自己尝试一下时,确实这有效并且似乎证明了所有关于鸭子打字,而不是IEnumerable:
public class Joker<T>
{
public T Item;
public Joker(T item)
{
Item = item;
}
}
public static class JokerHelp
{
public static T2 Select<T,T2>(this Joker<T> joke, Func<T,T2> call)
{
return call(joke.Item);
}
}
var oof = new Joker<int>(5);
int …Run Code Online (Sandbox Code Playgroud) 我需要使用Linq to Entities获得前10名记录.
我需要将返回的结果绑定到GridView如下"
Product Name | Product Description | Number of Items Sold
Item 1 | Item 1 Description | 24
Run Code Online (Sandbox Code Playgroud)
如上所述,物品需要按顺序存储,从销售的大多数商品开始.
以下是我到目前为止所尝试的内容:
public IQueryable GetTopTenProducts(DateTime startDate, DateTime endDate)
{
return
(from p in this.Entities.Product
join pro in this.Entities.ProductOrder on p.ID equals pro.ProductID
join o in this.Entities.Order on pro.OrderID equals o.ID
where o.DateOfOrder >= startDate && o.DateOfOrder <= endDate
select new
{
Product = p,
Quantity = pro.Qty,
ProductName = …Run Code Online (Sandbox Code Playgroud) 我的 linq 查询总结如下 -
string CustomerID;// can be "ALL" or any value
var itemlist = ( from itmhstry in context.ItemHistories
join itm in context.Items on itmhstry.ItemID equals itm.ItemID into itm_join
where itmhstry.CustomerID == CustomerID
.......................)
Run Code Online (Sandbox Code Playgroud)
然后查询继续选择所需的值
这里如何在CustomerID值为 ALL/NULL时选择所有值(如 select * >> without filter) 。?如何为此目的构建 where 子句?
我可以用 if else 重写相同的查询,以便有两个不同的查询来处理这个问题,但有没有更简单的方法呢?
我有以下数据模型:
public class Course
{
public int CourseId { get; set; }
public int StateId { get; set; }
}
public class CompletedCourse
{
public int CompletedCourseId { get; set; }
public int UserId { get; set; }
public Course Course { get; set; }
public string LicenseNumber { get; set; }
}
public class License
{
public int LicenseId { get; set; }
public int UserId { get; set; }
public int StateId { get; set; }
public string …Run Code Online (Sandbox Code Playgroud) linq ×8
c# ×7
.net ×1
duck-typing ×1
group-by ×1
lambda ×1
sql ×1
sql-order-by ×1
sql-server ×1