2

LINQ でテーブル内のすべてのフィールドを検索するにはどうすればよいですか? 以下の ANYFIELD には何を入力すればよいですか?

ありがとう

var tblequipments = from d in db.tblEquipments.Include(t => t.User).Include(t => t.ChangeLog).Include(t => t.AssetType)
                                where d."ANYFIELD" == "VALUE" select d;
4

4 に答える 4

5

できません。各フィールドを個別に比較する必要があります。フィールドが比較対象のオブジェクトと同じタイプではない可能性があるため、すべてのフィールドを比較することは意味がありません。

于 2013-07-30T16:17:18.847 に答える
3

リフレクションを使用して、できます。これを試して:

    static bool CheckAllFields<TInput, TValue>(TInput input, TValue value, bool alsoCheckProperties)
    {
        Type t = typeof(TInput);
        foreach (FieldInfo info in t.GetFields().Where(x => x.FieldType == typeof(TValue)))
        {
            if (!info.GetValue(input).Equals(value))
            {
                return false;
            }
        }
        if (alsoCheckProperties)
        {
            foreach (PropertyInfo info in t.GetProperties().Where(x => x.PropertyType == typeof(TValue)))
            {
                if (!info.GetValue(input, null).Equals(value))
                {
                    return false;
                }
            }
        }
        return true;
    }

そしてあなたのLINQクエリ:

var tblequipments = db.tblEquipments.Include(t => t.User).Include(t => t.ChangeLog).Include(t => t.AssetType) の d から
どこで CheckAllFields(d, "VALUE", true) select d;

trueすべてのフィールドすべてのプロパティをチェックする場合、およびすべてのフィールドのみをチェックする場合は、3 番目のパラメーターを指定する必要がありfalseます。

于 2013-07-30T17:03:50.923 に答える
1

これが誰かを助けるなら。

まず、クエリと同じタイプの Customer クラス内のすべてのプロパティを検索します。

var stringProperties = typeof(Customer).GetProperties().Where(prop =>
    prop.PropertyType == query.GetType());

次に、クエリと等しい値を持つプロパティを少なくとも 1 つ持つコンテキストからすべての顧客を検索します。

context.Customer.Where(customer => 
    stringProperties.Any(prop =>
        prop.GetValue(customer, null) == query));
于 2016-08-04T12:54:47.257 に答える