0
var query = (結果の u から
            u).AsQueryable(); を選択します。


// where 句を作成する
if (!string.IsNullOrEmpty(userRequest.searchData))
{
    if (userRequest.searchBy == "姓")
    {
        var likestr = userRequest.searchData.Trim();
        query = (from n in query where n.StartsWith(likestr) select n).AsQueryable();

    }
    if (userRequest.searchBy == "ファーストネーム")
    {

    }
    if (userRequest.searchBy == "メール")
    {
        //var likestr = string.Format("%{0}%", userRequest.searchData.Trim());

    }
    if (userRequest.searchBy == "UserId")
    {
        query = query.Where(x => SqlMethods.Equals(x.UserId, Convert.ToInt32(userRequest.searchData)));
    }
}

まず、DB にクエリを実行し、var クエリに格納します。

次に、検索データがある場合は、1 つまたは 4 つの可能な検索を使用して Where 句に追加しようとしています。

ヘルプ?

4

4 に答える 4

0

LinqでSQL-Behaviourを模倣しようとしないでください。リストを取得し、オブジェクトメソッドに基づいてこのリストをクエリできます。

代わりにこれを試してください:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;

namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable table = new DataTable();
            table.Columns.Add("ID", typeof(int));
            table.Columns.Add("FIRSTNAME", typeof(string));
            table.Columns.Add("LASTNAME", typeof(string));
            table.Columns.Add("EMAIL", typeof(string));

            // Here we add five DataRows.
            table.Rows.Add(1, "Chris", "Foo", "chris.foo@mail.com");
            table.Rows.Add(2, "Christoph", "Bar", "christoph.bar@mail.com");
            table.Rows.Add(3, "Michael", "FooBar", "michael.foobar@mail.com");
            table.Rows.Add(4, "Andreas", "BarFoo", "andreas.barfoo@mail.com");
            table.Rows.Add(5, "Carl", "Bar", "carl.bar@mail.com");

            Console.WriteLine("//Query ID");
            var query1 = (from dr in table.AsEnumerable() where dr.Field<int>("ID") == 1 select dr).FirstOrDefault();

            Console.WriteLine(query1.Field<int>("ID"));

            Console.WriteLine("//Query Firstname");
            var query2 = (from dr in table.AsEnumerable() where dr.Field<string>("FIRSTNAME").StartsWith("C") select dr).ToList<System.Data.DataRow>();

            foreach (var q in query2)
            {
                Console.WriteLine(q.Field<int>("ID"));
            }

            Console.ReadLine();
        }
    }
}

出力:

//Query ID
1
//Query Firstname
1
2
5
于 2010-12-09T15:26:54.953 に答える
0

必要に応じてクエリに追加するだけです。複数の 'where' 句を連鎖させることができ、順番に実行されます。

var query = (from u in results select u);

if (!string.IsNullOrEmpty(userRequest.searchData))
{
    if (userRequest.searchBy == "LastName")
    {
        var likestr = userRequest.searchData.Trim();
        query = (from n in query where n.LastName.StartsWith(likestr) select n);
    }
    if (userRequest.searchBy == "UserId")
    {
        var userId = Convert.ToInt32(userRequest.searchData);
        query = (from n in query where n.UserId == userId select n);
    }

于 2010-12-10T00:25:07.920 に答える
0

式ツリーを試してみませんか

于 2010-12-10T02:43:35.453 に答える
0

代わりに .Contains を使用します。

于 2010-12-09T15:15:48.527 に答える