相关疑难解决方法(0)

C#,Linq2SQL:创建谓词以查找多个范围内的元素

假设我的数据库中有一个名为Stuff的东西,名为Id.从用户那里我得到一系列选定的Range对象(或者我是从输入中创建它们)和他们想要的ID.该结构的精简版本如下所示:

public struct Range<T> : IEquatable<Range<T>>, IEqualityComparer<Range<T>>
{
    public T A;
    public T B;
    public Range(T a, T b)
    {
        A = a;
        B = b;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以有人可以得到:

var selectedRange = new List<Range<int>>
    {
        new Range(1, 4),
        new Range(7,11),
    };
Run Code Online (Sandbox Code Playgroud)

然后我想用它来创建一个谓词,只选择那些之间具有值的东西.例如,使用PredicateBuilder,我可以这样做:

var predicate = PredicateBuilder.False<Stuff>();
foreach (Range<int> r in selectedRange)
{
    int a = r.A;
    int b = r.B;
    predicate = predicate.Or(ø => ø.Id >= a && ø.Id <= b);
}
Run Code Online (Sandbox Code Playgroud)

然后:

var stuff = datacontext.Stuffs.Where(predicate).ToList(); …
Run Code Online (Sandbox Code Playgroud)

c# generics extension-methods predicate linq-to-sql

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

返回包含2个子类的IQueryable

你可以返回由两个或更多不同的子类组成的IQueryable吗?这是我尝试展示我的意思.它抛出错误:

System.NotSupportedException:Union或Concat中的类型具有以不同顺序分配的成员.

var a = from oi in db.OrderItems
        where oi.OrderID == ID
            && oi.ListingID != null
        select new OrderItemA {
            // etc
        } as OrderItem;

var b = from oi in db.OrderItems
        where oi.OrderID == ID
            && oi.AdID != null
        select new OrderItemB {
            //etc
        } as OrderItem;

return a.Concat<OrderItem>(b);
Run Code Online (Sandbox Code Playgroud)

c# linq-to-sql

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

标签 统计

c# ×2

linq-to-sql ×2

extension-methods ×1

generics ×1

predicate ×1