如何在使用linq到实体查询的地方之间添加OR?

时间:2018-04-22 07:38:26

标签: c# linq-to-entities

我想在linq中使用OR搜索同一列中的多个值。在SQL中,它是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainlayout_paint"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/home_paint"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:splitMotionEvents="true"
        >

        <ImageView
            android:id="@+id/imd_pic"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            />

        <com.nbagroup.luxuriousframe.UI.CustomViews.PainView
            android:id="@+id/surfaceView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/transparent"
            />

    </FrameLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/sideMenuView"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@drawable/background"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:scrollbars="horizontal"
        android:visibility="invisible" />

    <LinearLayout
        android:id="@+id/bottombar"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:orientation="horizontal"
        android:background="@drawable/background"
        android:gravity="center_horizontal|bottom"
        android:paddingBottom="10dp"
        >

        <ImageButton
            android:id="@+id/btnChangPhoto"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"
            android:background="?android:selectableItemBackground"
            android:scaleType="centerInside"
            android:src="@drawable/change_img" />

        <ImageButton
            android:id="@+id/btnChangFrame"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:src="@drawable/frames"
            android:background="?android:selectableItemBackground"
            android:scaleType="centerInside"
            android:layout_weight="0.25"
            />

        <ImageButton
            android:id="@+id/btnPhotoFilter"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:src="@drawable/photofilter"
            android:background="?android:selectableItemBackground"
            android:scaleType="centerInside"
            android:layout_weight="0.25"
            />

        <ImageButton
            android:id="@+id/btnNextPage"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:src="@drawable/frd_arrow"
            android:background="?android:selectableItemBackground"
            android:scaleType="centerInside"
            android:layout_weight="0.25"
            />

    </LinearLayout>

</LinearLayout>

id来自一个id数组,所以我将id传递给一个变量并循环它。数组中的id数量不固定,取决于用户通过选中表中的复选框选择的ID数。因为如果我执行如下操作,它将返回null,因为它在某种程度上将我的查询解释为AND。我如何更改它以便从所有ID获取行(使用OR)?

var query = "Select * from table where id = 1";
query += "OR where id = 2";

2 个答案:

答案 0 :(得分:3)

但我更喜欢:

&&

如果selectedIdList是一个字符串数组:

request.Where(y => selectedIdList.Contains(y.Id));

答案 1 :(得分:1)

您可以使用LinqKit。 Linqkit提供动态创建谓词的东西

使用packageManager安装linqKit,并使用predicateBuilder构建谓词

Hilbert

OR

var predicate = PredicateBuilder.True<Patient>();

predicate=predicate.And(...)

然后在ur where子句中使用谓词

这样您就可以像动态SQL

那样创建Or(动态)

您可以从此处获取更多详细信息 https://www.c-sharpcorner.com/UploadFile/c42694/dynamic-query-in-linq-using-predicate-builder/